Django学習

【Python】クラスベースと関数ベースの書き方views.py・forms.py【Django】

Djangoの学習 機能ごとの書き方の例

【Python】DjangoでBootstrapの導入とベーステンプレートの解説Djangoの学習 Bootstrapの導入 https://prcmyself.com/first-django-step-1 1...

1.ビュー(views.py)

ビューは、関数ベースとクラスベースが存在する。
関数ベースは、自分で書く処理が多い。
クラスベースは、金型が決まっているので簡潔にかける。
クラスベースが主流らしい。
views.pyの書き方とurls.pyの書き方が違うのでその違いを例として下記へ。

関数ベースの例

from django.shortcuts import render
from django.http import HttpResponse 
from django.shortcuts import redirect 

def index(request):
    params={
        'title':'index',
        'msg' : 'indexページです',
    }

    return render(request, 'index.html',params)
from django.urls import path
from . import views


urlpatterns = [
    path('index',views.index,name='index'),
]

 

クラスベースの例

from django.views import generic

class IndexView(generic.TemplateView):
    template_name = "index.html"
from django.urls import path
from . import views


urlpatterns = [
    path('index',views.IndexView.as_view(),name="index"),

 

2.フォーム(forms.py)

フォームもビューと同じように2つタイプがある。
一つは、django.forms.Formクラスを継承したやり方。
これは、forms.pyに直接フォームの定義を記載する。

もう一つは、django.forms.ModelFormクラスを継承したやり方。
これば、models.pyに定義を記載して、それを元にフォームを設定するやり方。

django.forms.Form関数ベースの例

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(label ='お名前', max_length="40", required=False)
from django.shortcuts import render
from django.http import HttpResponse 
from django.shortcuts import redirect 

def contact(request):
    params = {
        'name':'お名前は?',
        'form':ContactForm(),
    }
    if (request.method =='POST'):
        params['name'] = request.POST['name'] + 'さんですね'
        
    return render(request,'contact.html',params)
{% extends 'base.html' %}
{% block body-contents %}
<h2>{{name}}</h2>
<form action="{% url 'contact' %}" method="POST">
    {% csrf_token %}
    {{form}}
    <input type="submit" value='送信'>
</form>

{% endblock %}
from django.urls import path
from . import views


urlpatterns = [
    path('contact',views.contact,name='contact'),

]

 

 

django.forms.ModelFormクラスベースの例

from django import forms
from . models import Customer

class CustomerForm(forms.ModelForm):
    class Meta:
        models = Customer
        fields = ('name',)
from django.shortcuts import render
from django.http import HttpResponse 
from django.shortcuts import redirect 
from django.views import generic
from .models import Customer



class CustomerCreateView(generic.CreateView):
    model = Customer
    fields = ('name',)
    template_name = 'customercreate.html'
    success_url = 'customer'
{% extends 'base.html' %}
{% block body-contents %}
<form   method='POST'>
    {% csrf_token %}
    {{form.as_p}}
<button type="submit">登録</button>
    
</form>
{% endblock %}
from django.urls import path
from . import views

urlpatterns = [
    path('customercreate',views.CustomerCreateView.as_view(),name='customercreate'),  
]

 

【Python】初めてのDjangoフォームの使い方【クラスベース】Djangoの学習 モデルフォームの使い方 フォームには2つタイプがある。 ちなみに、関数ベースをまとめ...

 

3.モデル(models.py)

from django.db import models

# Create your models here.
class Customer(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

 

4.管理画面(admin.py)

from django.contrib import admin
from .models import Customer

# Register your models here.
admin.site.register(Customer)