Ruby on railsとDjangoの違いまとめ~基礎編~
1. はじめに
プログラミングを始めて4ヶ月の初心者です!
Ruby on railsとDjangoを勉強中なので、
アウトプット(備忘録)として、その基礎的なコードの違いを書いていきたいと思います!!
railsから学習を始めていることから、
基本rails目線で、Djangoの場合はどうか?という目線で書いております
少しでも、ご参考になりましたら幸いです。
(勉強中なので、随時追記・修正していく予定です!)
2. MVCモデル(Rails)とMTVモデル(Django)
"View"の名前が被っているので、ややこしい感じがしますが、大まかな流れは同じです。
自分のイメージを以下に示します。
3. ルーティング編
(Railsの場合)
routes.rbに記載していきます。
ターミナル上で"rake routes"を叩けば、URLパターンやprefixを確認できます!
root 'products#index'
get 'index', to: 'products#index'
(Djangoの場合)
urls.pyに記載していきます。
path()関数を使用し、これは引数にroute,view,name,kwargsの4つの引数を取ります。
ここでは、ルートURL('')に、viewのindex関数を対応させ、indexという名称で他のファイル(templateなど)から呼び出せるようにしています。
viewにおいて汎用クラスを呼び出す場合は、"as_view"を使用します。
from django.urls import path
from . import views
app_name = "アプリ名"
urlpatterns = [
path("", views.index, name="index"),
path("products/", views.ProductListView.as_view(), name="products_list"),
]
4. コントローラー/ビュー編
4-1. htmlファイルの指定方法
(Railsの場合)
controllerのアクション名と同じ名前のviewが呼び出されるというルールがありますので、
特にコードは必要なく、アクション名と同名のviewファイルを準備することで、そのview(html)ファイルが呼び出されます。
def index
end
.title
haml等でhtmlを記載していきます
(Djangoの場合)
関数を使用するか、クラスを使用するかによって、
それぞれ、renderメソッドかtemplate_nameメソッドを使用します(他にもいっぱいあるようです)
# 関数を使用する場合
def index(request):
return render(request, "index.html")
# クラスを使用する場合
class ModelListView(ListView):
model = Model
template_name = "index.html"
4-2.インスタンス変数のhtmlファイルへの渡し方
(Railsの場合)
htmlファイルにおいて、変数を使用するために、@をつけて、インスタンス変数を定義します。
def index
@product = Product.where(id: 1..10)
end
(Djangoの場合)
変数がないのにhtmlファイルでデータが扱える、というのが衝撃的です!
class XxxListView(LoginRequiredMixin, ListView):
model = Xxx
template_name = "xxx.html"
# templateにおいて、xxx_listで配列としてデータが使用できる
def get_context_data(self, **kwargs):
context["hennsu"] = "value"
return context
#本メソッドで"hennsuという変数を渡すことができます
(とはいっても、get_context_dataやget_querysetで変数の定義やデータの選択が可能です)
5. ビュー/テンプレート編
・部分テンプレートの書き方
(Railsの場合)
renderメソッドを使用します。
<%= render '(フォルダ名/)yyy.html.erb' %>
-# render先は'_yyy.html.erb'という名称とします
(Djangoの場合)
{% block content %}
# ここに他のhtmlファイルを差し込みます
{% endblock %}
{% extends "base.html" %}
{% block content %}
# この部分をbase.htmlに差し込みます(逆かもしれません)
{% endblock %}
ここはrailsの方が自由度が高いかと思います。
・ログインしているユーザー情報の表示
(Railsの場合)
- if user_signed_in?
%div
current_user.name
(Djangoの場合)
{% if user.is_authenticated %}
<div> User Name: {{ user.username }} </div>
6. モデル編
・マイグレーション
(Railsの場合)
モデルの作成 (rails g model Xxx) or マイグレーションファイルの作成 (rails g migration)
->マイグレーションファイルの記入
->マイグレーションの実行(rake db:migrate)
##一例です
t.string :name, null: false
(Djangoの場合)
models.pyへの記入
->マイグレーションファイルの作成(python manage.py makemigrations)
->マイグレーションの実行(python manage.py migrate)
class Xxx(models.Model):
xxx = models.CharField(max_length=200)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
7. 感想
触っている時間が長いせいもあるかと思いますが、
railsの方がファイルの関係性も簡潔であり、
erbファイルにロジックが書けたりと、コードの自由度が高く、狙い通りのアプリを作成しやすい気がします。
一方で、Djangoは、やや構成に癖があるような気がします。
ただ、記述量が少なく、慣れたら速そうです。
さらに、pythonのメリットは豊富なライブラリにあると考えているので、
その豊富なライブラリをアプリで活かせるかどうか、が、ポイントのような気がしています。
(もっと勉強して、随時修正予定です!)
読んでいただきありがとうございました
Author And Source
この問題について(Ruby on railsとDjangoの違いまとめ~基礎編~), 我々は、より多くの情報をここで見つけました https://qiita.com/hirakei1203/items/ffae00fe0748f975996b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .