学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Django3.2 | クラウドソーシングアプリの構築 | 09 | サインアップ

↓↓クリックして頂けると励みになります。


08 | サインイン】 << 【ホーム】 >> 【10 | Facebook認証



「crowdsource/urls.py」ファイルにパスを追加します。


記述追加 【Desktop/crowdsource/crowdsource/urls.py】12行目

from django.contrib import admin
from django.urls import path
from django.contrib.auth import views as auth_views
from core import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home),

    path('sign-in/', auth_views.LoginView.as_view(template_name="sign_in.html")),
    path('sign-out/', auth_views.LogoutView.as_view(next_page="/")),
    path('sign-up/', views.sign_up),
    
    path('customer/', views.customer_page),
    path('courier/', views.courier_page),

]



「core/views.py」ファイルに記述を追加します。


記述追加【Desktop/crowdsource/core/views.py】16行目

from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required

from . import forms

# Create your views here.
def home(request):
    return render(request, 'home.html')

@login_required()
def customer_page(request):
    return render(request, 'home.html')

@login_required()
def courier_page(request):
    return render(request, 'home.html')

def sign_up(request):
    form = forms.SignUpForm()

    if request.method == 'POST':
        form = forms.SignUpForm(request.POST)

        if form.is_valid():
            email = form.cleaned_data.get('email').lower()

            user = form.save(commit=False)
            user.username = email
            user.save()

            login(request, user)
            return redirect('/')


    return render(request, 'sign_up.html', {
        'form': form
    })



「core/templates」フォルダに「sign_up.html」ファイルを新規作成します。
作成した「sign_up.html」ファイルを以下のように編集します。



新規作成 【Desktop/crowdsource/core/templates/sign_up.html】

{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="container-fluid mt-5">
    <div class="row justify-content-center">
        <div class="col-lg-4">
            <div class="card">
                <div class="card-header bg-primary text-light">
                    <div class="text-center pt-2">
                        <h4>
                        {% if request.GET.next != '/courier/' %}
                        依頼人 | 新規ユーザ登録
                        {% else %}
                        配達人 | 新規ユーザ登録
                        {% endif %}
                        </h4>
                        
                    </div>
                </div>
                <div class="card-body">
                    <form method="POST">
                        {% csrf_token %}
                        {% bootstrap_form form %}
                        <button type="submit" class="btn btn-primary btn-block">
                            新規ユーザ登録
                        </button>
                        <p class="text-center mt-3">
                            登録がお済みの方<a href="/sign-in/?next={{ request.GET.next }}"><span class="btn btn-outline-success btn-sm ml-2">ログイン</span></a>
                        </p>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}



「templates/sign_in.html」ファイルを編集します。


記述編集 【Desktop/crowdsource/core/templates/sign_in.html】

{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="container-fluid mt-5">
    <div class="row justify-content-center">
        <div class="col-lg-4">
            <div class="card">
                <div class="card-header bg-info text-light">
                    <div class="text-center pt-2">
                        <h4>
                        {% if request.GET.next != '/courier/' %}
                        依頼人
                        {% else %}
                        配達人
                        {% endif %}
                        </h4>
                        
                    </div>
                </div>
                <div class="card-body">
                    <form method="POST">
                        {% csrf_token %}
                        {% bootstrap_form_errors form %}
                        {% bootstrap_label "メールアドレス" %}
                        {% bootstrap_field form.username show_label=False placeholder="メールアドレス" %}
                        {% bootstrap_label "パスワード" %}
                        {% bootstrap_field form.password show_label=False placeholder="パスワード" %}
                        <button class="btn btn-info btn-block">
                            サインイン
                        </button>
                        <p class="text-center mt-3">
                            登録がお済みでない方<a href="/sign-up/?next={{ request.GET.next }}"><span class="btn btn-outline-success btn-sm ml-2">新規登録</span></a>
                        </p>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}



「crowdsource/core」フォルダに「forms.py」ファイルを新規作成します。
作成した「forms.py」ファイルを以下のように編集します。



新規作成 【Desktop/crowdsource/core/forms.py】

from django.db import models
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError

class SignUpForm(UserCreationForm):
  email = models.EmailField(max_length=250)
  first_name = models.CharField(max_length=150)
  last_name = models.CharField(max_length=150)

  class Meta:
    model = User
    fields = ('email', 'last_name', 'first_name', 'password1', 'password2')

  def clean_email(self):
    email = self.cleaned_data['email'].lower()
    if User.objects.filter(email=email):
      raise ValidationError("このメールアドレスはすでに登録されています。")
    return email




ユーザ登録できることを確認してください。
メールアドレスが重複している場合、バリデーションエラーが返ってきます。
管理画面でユーザが登録を確認してください。
http://127.0.0.1:8000/sign-up/

新規ユーザー登録
新規ユーザー登録


↓↓クリックして頂けると励みになります。


08 | サインイン】 << 【ホーム】 >> 【10 | Facebook認証