[PYTHON] Zusammenfassung der Unterschiede zwischen Ruby on Rails und Django ~ Basics ~

1. Zuallererst

Ich bin seit 4 Monaten ein Anfänger, seit ich mit dem Programmieren angefangen habe! Ich studiere Ruby on Rails und Django Als Ausgabe (Gedenknotiz) möchte ich den Unterschied im Basiscode schreiben! !! : bleistift2 :: anfänger: Seit ich angefangen habe, von Schienen zu lernen Was ist mit Django? Es ist geschrieben aus der Perspektive von: smile: Wir hoffen, Sie finden es hilfreich. (Da ich studiere, habe ich vor, es nach Bedarf hinzuzufügen und zu korrigieren!)

2. MVC-Modell (Rails) </ font> und MTV-Modell (Django) </ font>

Es ist verwirrend, weil es unter dem Namen "Ansicht" angezeigt wird, aber der allgemeine Ablauf ist der gleiche. Hier ist mein Bild. スクリーンショット 2020-01-04 20.46.48.png

3. Routing

(Für Schienen) Ich werde es in route.rb beschreiben. Sie können das URL-Muster und das Präfix überprüfen, indem Sie auf dem Terminal auf "Rake-Routen" klicken!

config/routes.rb


root 'products#index'
get 'index', to: 'products#index'

(Für Django) Ich werde es in urls.py beschreiben. Es verwendet die Funktion path (), die vier Argumente akzeptiert: route, view, name und kwargs. Hier ist die Indexfunktion der Ansicht der Stamm-URL ('') zugeordnet, so dass sie aus einer anderen Datei (Vorlage usw.) mit dem Namensindex aufgerufen werden kann. Verwenden Sie "as_view", um eine generische Klasse in view aufzurufen.

app/urls.py


from django.urls import path
from . import views

app_name = "App Name"

urlpatterns = [
    path("", views.index, name="index"),
    path("products/", views.ProductListView.as_view(), name="products_list"),
]

4. Controller / Ansicht

4-1. So geben Sie eine HTML-Datei an

(Für Schienen) Da es eine Regel gibt, dass die Ansicht mit demselben Namen wie der Aktionsname des Controllers aufgerufen wird, Es ist kein spezieller Code erforderlich. Wenn Sie eine Ansichtsdatei mit demselben Namen wie der Aktionsname vorbereiten, wird diese Ansichtsdatei (HTML) aufgerufen.

controllers/products_controller.rb


def index
end

Ruby:views/index.html.erb


.title
Ich werde HTML mit Haml usw. beschreiben.

(Für Django) Abhängig davon, ob Sie eine Funktion oder eine Klasse verwenden Verwenden Sie die Methoden render bzw. template_name (es scheint viele andere zu geben).

app/views.py


#Bei Verwendung einer Funktion
def index(request):
    return render(request, "index.html")

#Bei Verwendung einer Klasse
class ModelListView(ListView):
  model = Model
  template_name = "index.html" 

4-2. Übergeben von Instanzvariablen an eine HTML-Datei

(Für Schienen) Fügen Sie in der HTML-Datei @ hinzu, um die Instanzvariable zu definieren, die die Variable verwenden soll.

products_controller.rb



def index
  @product = Product.where(id: 1..10)
end

(Für Django) Es ist schockierend, dass Daten in einer HTML-Datei verarbeitet werden können, obwohl es keine Variablen gibt!

views.rb


class XxxListView(LoginRequiredMixin, ListView):
  model = Xxx
  template_name = "xxx.html"
  #In der Vorlage xxx_Daten können als Array in der Liste verwendet werden

  def get_context_data(self, **kwargs):
    context["hennsu"] = "value"
    return context
    #Mit dieser Methode"Sie können eine Variable namens hennsu übergeben

(Sie können jedoch Variablen definieren und Daten mit get_context_data und get_queryset auswählen.)

5. View / Template Edition

・ So schreiben Sie eine Teilvorlage

(Für Schienen) Verwenden Sie die Rendermethode.

Ruby:index.html.erb


<%= render '(Ordnernamen/)yyy.html.erb' %>
-#Das Renderziel ist'_yyy.html.erb'Ich werde es nennen

(Für Django)

base.html


{% block content %}
  #Fügen Sie hier eine weitere HTML-Datei ein
{% endblock %}

index.html


{% extends "base.html" %}
{% block content %}
  #Basis dieses Teils.In HTML einfügen (vielleicht umgekehrt)
{% endblock %}

Ich denke, Schienen haben hier einen höheren Freiheitsgrad.

・ Anzeige der angemeldeten Benutzerinformationen

(Für Schienen)

Ruby:view.html.haml


 - if user_signed_in?
   %div
     current_user.name

(Für Django)

template.html


{% if user.is_authenticated %}
  <div> User Name: {{ user.username }} </div>

6. Modell

·Migration

(Für Schienen) Erstellen eines Modells (Rails G Model Xxx) oder Erstellen einer Migrationsdatei (Rails G Migration) -> Füllen Sie die Migrationsdatei aus -> Migration ausführen (Rake DB: Migration)

Migrationsdatei


##Es ist ein Beispiel
  t.string :name,               null: false

(Für Django) Füllen Sie models.py aus -> Migrationsdateien erstellen (python manage.py Migrationen durchführen) -> Migration ausführen (python manage.py migrate)

models.py


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. Eindrücke

Ich denke, das liegt daran, dass ich es schon lange berührt habe. Schienen hat einfachere Dateibeziehungen und Die Logik kann in die erb-Datei geschrieben werden, und der Freiheitsgrad des Codes ist hoch, sodass ich der Meinung bin, dass es einfach ist, die App wie beabsichtigt zu erstellen. Auf der anderen Seite scheint Django in der Komposition etwas schrullig zu sein. Die Menge an Beschreibungen ist jedoch gering und scheint schnell zu sein, sobald Sie sich daran gewöhnt haben. Darüber hinaus denke ich, dass der Vorteil von Python in der umfangreichen Bibliothek liegt Ich denke, der Punkt ist, ob die reichlich vorhandene Bibliothek in der App verwendet werden kann oder nicht. (Ich werde mehr lernen und es jederzeit beheben!) Vielen Dank für das Lesen: bow_tone3:

Recommended Posts