Résumé des différences entre Ruby on rails et Django ~ Bases ~

1.Tout d'abord

Je suis débutant depuis 4 mois depuis que j'ai commencé la programmation! J'étudie Ruby sur rails et Django En guise de sortie (note commémorative), je voudrais écrire la différence dans le code de base! !! : crayon2 :: débutant: Depuis que j'ai commencé à apprendre des rails Du point de vue des rails de base, qu'en est-il de Django? Il est écrit du point de vue de: sourire: Nous espérons que vous le trouverez utile. (Puisque j'étudie, je prévois de l'ajouter et de le corriger au besoin!)

2. Modèle MVC (Rails) </ font> et Modèle MTV (Django) </ font>

C'est déroutant car il est couvert par le nom "View", mais le flux général est le même. Voici mon image. スクリーンショット 2020-01-04 20.46.48.png

3. Routage

(Pour les rails) Je vais le décrire dans routes.rb. Vous pouvez vérifier le modèle d'URL et le préfixe en appuyant sur "rake routes" sur le terminal!

config/routes.rb


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

(Pour Django) Je vais le décrire dans urls.py. Il utilise la fonction path (), qui prend quatre arguments: route, vue, nom et kwargs. Ici, la fonction d'index de view est associée à l'URL racine ('') pour pouvoir être appelée depuis un autre fichier (template, etc.) avec le nom index. Utilisez "as_view" pour appeler une classe générique dans la vue.

app/urls.py


from django.urls import path
from . import views

app_name = "nom de l'application"

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

4. Contrôleur / Vue

4-1. Comment spécifier un fichier html

(Pour les rails) Puisqu'il existe une règle selon laquelle la vue portant le même nom que le nom d'action du contrôleur est appelée, Aucun code spécial n'est requis, et en préparant un fichier de vue avec le même nom que le nom de l'action, ce fichier de vue (html) sera appelé.

controllers/products_controller.rb


def index
end

Ruby:views/index.html.erb


.title
Je décrirai html avec haml etc.

(Pour Django) Selon que vous utilisez une fonction ou une classe Utilisez respectivement les méthodes render ou template_name (il semble y en avoir beaucoup d'autres)

app/views.py


#Lors de l'utilisation d'une fonction
def index(request):
    return render(request, "index.html")

#Lors de l'utilisation d'une classe
class ModelListView(ListView):
  model = Model
  template_name = "index.html" 

4-2. Comment transmettre des variables d'instance à un fichier html

(Pour les rails) Dans le fichier html, ajoutez @ pour définir la variable d'instance pour utiliser la variable.

products_controller.rb



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

(Pour Django) Il est choquant que les données puissent être traitées dans un fichier html même s'il n'y a pas de variables!

views.rb


class XxxListView(LoginRequiredMixin, ListView):
  model = Xxx
  template_name = "xxx.html"
  #Dans le modèle, xxx_Les données peuvent être utilisées comme un tableau dans la liste

  def get_context_data(self, **kwargs):
    context["hennsu"] = "value"
    return context
    #Avec cette méthode"Vous pouvez passer une variable appelée hennsu

(Cependant, vous pouvez définir des variables et sélectionner des données avec get_context_data et get_queryset)

5. Édition de vue / modèle

・ Comment rédiger un modèle partiel

(Pour les rails) Utilisez la méthode de rendu.

Ruby:index.html.erb


<%= render '(Nom de dossier/)yyy.html.erb' %>
-#La destination du rendu est'_yyy.html.erb'Je vais l'appeler

(Pour Django)

base.html


{% block content %}
  #Insérez un autre fichier html ici
{% endblock %}

index.html


{% extends "base.html" %}
{% block content %}
  #Basez cette partie.Insérer dans html (peut-être vice versa)
{% endblock %}

Je pense que les rails ont un plus grand degré de liberté ici.

・ Affichage des informations de l'utilisateur connecté

(Pour les rails)

Ruby:view.html.haml


 - if user_signed_in?
   %div
     current_user.name

(Pour Django)

template.html


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

6. Modèle

·migration

(Pour les rails) Création d'un modèle (rails g modèle Xxx) ou création d'un fichier de migration (rails g migration) -> Remplissez le fichier de migration -> Lancer la migration (rake db: migrate)

Fichier de migration


##C'est un exemple
  t.string :name,               null: false

(Pour Django) Remplissez models.py -> Créer des fichiers de migration (python manage.py effectue des migrations) -> Lancer la migration (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. Impressions

Je pense que c'est parce que je le touche depuis longtemps, rails a des relations de fichiers plus simples et La logique peut être écrite dans le fichier erb et le degré de liberté du code est élevé, je pense donc qu'il est facile de créer l'application comme prévu. D'un autre côté, Django semble être un peu décalé dans sa composition. Cependant, la quantité de description est faible et semble rapide une fois que vous vous y êtes habitué. De plus, je pense que l'avantage de python réside dans la riche bibliothèque, donc Je pense que le point est de savoir si la bibliothèque abondante peut être utilisée ou non dans l'application. (J'étudierai plus et le réparerai à tout moment!) Merci d'avoir lu: bow_tone3:

Recommended Posts