会員に加入する
37330 ワード
モデルの作成
アプリケーション内のモデルは、
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から継承可能な要素
このプロジェクトではAbstractUserモデルに基づいて必要なデータ(email,本人確認質問,解答)を追加することにした.
AbstractUserが継承されている場合は、設定します.pyに次のコードを追加する必要があります.
AUTH_USER_MODEL = 'appname.modelName'
フォームの作成
appフォルダに会員加入システムに必要なformを作成します.pyを作る
ドラムには基本的に提供される会員加入形式の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です.フォームに記入した後、フォームとUserManagerを記入できますが、ライブラリには基本的に十分な内容があるため、個別にカスタマイズすることはできません.
ビューの作成
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})
合成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を与えるコードである.データ入力が完了したら、登録ボタンをクリックしてフォームを提出します.Reference
この問題について(会員に加入する), 我々は、より多くの情報をここで見つけました https://velog.io/@kcho32/Registeringテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol