会員に加入する


モデルの作成


アプリケーション内のモデルは、
  • データベースに適切なテーブルを作成できます.py上にモデルを作成します.
  • from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    class CustomUser(AbstractUser):
        email = models.EmailField()
        self_prove = models.CharField(max_length=50)
        self_prove_answer = models.CharField(max_length=50)
    
        def __str__(self):
            return self.username

  • AbstractUserおよびAbstractBaseUserは、本明細書で提供されるUserモデルである.両者の違いは、AbstractUserは、User Modelが提供するFieldを使用して新しいFields、functionを追加することができ、AbstractBaseUserは、最初から最後まで作成する必要がある空のモデルと考えられることである.
    AbstractBaseUserから継承可能な要素
  • id:primary key(値は唯一)
  • password
  • last_login
  • AbstractUserは基本的にAbstractBaseUser以外の要素を継承することができる.
  • fields
  • ユーザー名:アカウント
  • first name:名前
  • last name:省
  • Eメール:
  • Eメール
  • is staff:従業員(権限に分割)
  • is active:アカウント
  • を有効にするかどうか
  • date incomed:登録日
  • functions
  • def clean(self):電子メールを小文字にする関数(電子メールは小文字のみ)
  • defget full name(self)ユーザのfullnameの関数を取得する(firstとlastnameを組み合わせる)
  • defget short name(自己)first nameなどの名前は、識別子(非公式識別子)として使用できます.
  • def email_user(self, subject, message, from_email=None, **kwargs):

  • このプロジェクトではAbstractUserモデルに基づいて必要なデータ(email,本人確認質問,解答)を追加することにした.

  • AbstractUserが継承されている場合は、設定します.pyに次のコードを追加する必要があります.
  • AUTH_USER_MODEL = 'appname.modelName'

    フォームの作成


  • appフォルダに会員加入システムに必要なformを作成します.pyを作る

  • ドラムには基本的に提供される会員加入形式のUserCreationFormが存在する.
  • UserCreationFormに含まれるフィールド

  • username

  • password1

  • password2
    validate password()でパスワードの適合性をチェック
    set password()で適切なpasswordを設定します.

  • 基本フォームを保持し、フィールドを追加する新しいUserFormを作成できます.Formにより、ユーザーはhtmlにデータを入力できます.
    class UserForm(UserCreationForm):
        last_name = forms.CharField(label="성")
        first_name = forms.CharField(label="이름")
        email = forms.EmailField(label="이메일")
        self_prove = forms.CharField(label='본인인증 질문')
        self_prove_answer = forms.CharField(label='본인인증 질문 정답')
    
        class Meta:
            model = CustomUser
            fields = (
                "username",
                "last_name",
                "first_name",
                "password1",
                "password2",
                "email",
                "self_prove",
                "self_prove_answer"
            )
    
        def save(self):
            user = super(UserForm, self).save(commit=False)
            user.save()
            try:
                student = Group.objects.get(name='student')
                student.user_set.add(user)
            except Group.DoesNotExist:
                student = Group.objects.create(name='student')
                student.user_set.add(user)
            return
    class metaは、フィールド以外のコンテンツを変更および作成するためのclassです.
  • class Meta
  • model=Customerフォームがどのモデルで作成されたコードかを指定します.これはCustomerというモデルのために用意されたことを説明します.
  • fields = ("username", "last_name".....) 元のフォームの「ユーザー名」、「password 1」および「password 2」に加えて、追加するフィールドも指定します.
  • これは
  • def save(self)フォーム保存時に実行されるコードです.本プロジェクトでは、フォームの保存時にグループをフィルタするために作成されたコードです.(上のコードはstudentというグループを作成し、userを挿入します.または、グループがすでに存在する場合は、そのグループのみを挿入します.)

  • フォームに記入した後、フォームとUserManagerを記入できますが、ライブラリには基本的に十分な内容があるため、個別にカスタマイズすることはできません.
  • ビューの作成

  • 倉庫(Django)では、ビューがコントローラの役割を果たしています.
  • 会員の入会時にInstructionコードを入力するか否かにより、ユーザを従業員と学生または講師に分けてグループ化する.権限を設定できるのはスタッフの有無のみですが、admin管理を容易にするためにグループを指定しました.
  • def signup(request):
        if request.method == 'POST':  # request 들어온 것이 post방식이면
            if request.POST['teacher_code'] in ['A0001', 'A0002']:
                form = StaffForm(request.POST)
            else:
                form = UserForm(request.POST)  # form에 UserForm post version으로 저장한다
            if form.is_valid():  # form이 valid하면
                form.save()
                return redirect('../login')
        else:
            form = UserForm()  # 계정 생성 화면 리턴
        return render(request, './common/signup.html', {'form': form})
  • 要求の実行は、POSTかGETかによって決まる.GETに入って登録します.htmlでは、FormがカスタムのUserFormをユーザーに渡し、対応するhtmlを開きます.
  • 合成HTML

    <div class="container my-3">
        <div class="row my-3">
            <div class="col-4">
                <h4>계정생성</h4>
            </div>
        </div>
        <form method="post" class="post-form" action="{% url 'common:signup' %}">
            {% csrf_token %}
            <div class="form-group">
                <label for="username">아이디</label>
                <input type="text" class="form-control" name="username" id="username"
                       value="{{ form.username.value|default_if_none:'' }}">
            </div>
    
            <div class="form-group">
                <label for="password1">비밀번호</label>
                <input type="password" class="form-control" name="password1" id="password1"
                       value="{{ form.password1.value|default_if_none:'' }}">
            </div>
            <div class="form-group">
                <label for="password2">비밀번호 재확인</label>
                <input type="password" class="form-control" name="password2" id="password2"
                       value="{{ form.password2.value|default_if_none:'' }}">
            </div>
            <div class="form-group">
                <label for="last_name">성(Last Name)</label>
                <input type="text" class="form-control" name="last_name" id="last_name"
                       value="{{ form.last_name.value|default_if_none:'' }}"> <div class="form-group">
            </div>
                <label for="first_name">이름(First Name)</label>
                <input type="text" class="form-control" name="first_name" id="first_name"
                       value="{{ form.first_name.value|default_if_none:'' }}">
            </div>
    
            <div class="form-group">
                <label for="email">이메일</label>
                <input type="text" class="form-control" name="email" id="email"
                       value="{{ form.email.value|default_if_none:'' }}">
            </div>
            <div class="form-group">
                <label for="teacher_code">강사코드</label>
            <input type="text" name="teacher_code" id="teacher_code" value="강사님만 입력">
            </div>
            <input type="submit" value="가입하기">
            <input type="button" onclick="location.href='{% url 'common:login' %}'" value="login화면으로">
        </form>
    </div>
    上のコードは、HTMLでログインフォームを実装するコードです.この点をよりよく説明するために、CSSはしばらく使用しません.
    <form id="registerForm" method="post" action="{% url 'common:signup' %}">
                    {% csrf_token %}
                    {% include "form_errors.html" %}
    クライアントとサーバの間でhttpプロトコルのGETとPOSTを用いてデータ交換を行う.
    クライアントがサーバにデータを送信する場合は、Formを使用します.Formを使用してユーザーからデータを収集し、サーバに送信します.
    上記のコードは、以下に実現するコードでユーザから情報を受信し、POST方式でパブリックアプリケーションのsignup名を所定のURLに送信することを意味する.
    <div class="form-group">
        <label for="username">아이디</label>
        <input type="text" class="form-control" name="username" id="username"
               value="{{ form.username.value|default_if_none:'' }}">
    </div>
    <input type="submit" value="가입하기">
    これは、フォームに必要な入力をユーザーが作成できるように実装するコードです.このコードのinputデータは、テキスト形式でデータを受信し、usernameと命名してidを与えるコードである.データ入力が完了したら、登録ボタンをクリックしてフォームを提出します.