django でユーザー登録フォーム
django でユーザー登録フォーム
django でユーザー登録フォームを作成したので残しておきたいと思います。
参考:
・python 正規表現でメールアドレスの一致チェック、抽出を行う
・【clean】djangoでフォームを複数のカラムにまたがって入力チェックする
コード
コードは下記の通りになります。
import re
from django.contrib.auth import forms as auth_forms
from django.core.exceptions import ValidationError
from django import forms
from .models import User
class RegistrationForm(forms.Form):
username = forms.CharField(
label='ユーザー名',
max_length=50,
min_length=1,
required=True,
widget=forms.TextInput(attrs={'placeholder': 'username'}),
)
email = forms.CharField(
label='メールアドレス',
max_length=50,
min_length=1,
required=True,
widget=forms.TextInput(attrs={'placeholder': 'email'}),
)
password1 = forms.CharField(
label='パスワード',
max_length=50,
min_length=8,
required=True,
widget=forms.PasswordInput(attrs={'placeholder': 'password'}),
)
password2 = forms.CharField(
label='パスワード',
max_length=50,
min_length=8,
required=True,
widget=forms.PasswordInput(attrs={'placeholder': 'password(confirm)'}),
)
def clean_username(self):
username = self.cleaned_data['username']
if not username or username == '':
raise ValidationError('ユーザー名を入力して下さい。')
if len(username) > 50:
raise ValidationError('ユーザー名が長すぎます。')
exist_username = User.objects.filter(username=username).exists()
if exist_username:
raise ValidationError('ユーザー名は既に登録されています。')
return username
def clean_email(self):
email = self.cleaned_data['email']
if not email or email == '':
raise ValidationError('メールアドレスを入力して下さい。')
if len(email) > 50:
raise ValidationError('メールアドレスが長すぎます。')
pattern = '^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
if not re.match(pattern, email):
raise ValidationError('正しいメールアドレスを入力してください。')
exist_email = User.objects.filter(email=email).exists()
if exist_email:
raise ValidationError('メールアドレスは既に登録されています。')
return email
def clean_password1(self):
password1 = self.cleaned_data['password1']
if not password1 or password1 == '':
raise ValidationError('パスワードを入力して下さい。')
if len(password1) > 50:
raise ValidationError('パスワードが長すぎます。')
if len(password1) < 8:
raise ValidationError('パスワードは8文字以上設定して下さい')
return password1
def clean(self):
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 != password2:
raise ValidationError('パスワードが一致しません。')
ディスカッション
コメント一覧
まだ、コメントがありません