(ジャンゴに基づく)のpython3のユーザ登録

1フロントエンド部(導入とjQueryブートストラップ)

< DIV クラス= "コンテナ" > 
        < DIV クラス= "COL-MD-8 COL-MD-オフセット-2" > 
                {フォーム%で項目の%} 
                    < DIV クラス= "フォームグループ" > 
                        < lable > {{ item.label}} </ lable > 
                        {{アイテム}} 
                        < スパンクラス= "エラープル右" > </ スパン> 
                    </ DIV > 
                {%ENDFOR%} 
                < 入力タイプ= "送信します"クラス= "BTN BTN-主要reg_btn"= "提交" > 
        </ DIV > 
        </ DIV > 
    < スクリプト> 
        $(' .reg_btn ' ).click(関数(){ 
           $アヤックス({ 
            URL:'' 
            種類:" ポスト" 
            データ型:" JSON " 
            データ:{ 
                ユーザー:$(' #id_user ' ).val()、
                PWD:$(' #id_pwd ')。H()
                r_pwd:$(' #id_r_pwd ' ).val()、
                電子メール:$(' #id_email ' .val)()、
                csrfmiddlewaretoken:$(" [名= 'csrfmiddlewaretoken'] " ).val()、
            }、
            成功:機能(RES ){
                 場合(res.user){ 
                    LOCATION.HREF = ' /ログイン/ ' 
                } { 
                     $(' .ERROR ' )の.html('' )。
                 $(" ' ).RemoveClass(' -エラーが発生しました' );
                  // ページに表示される対応する情報横断するため
                 の$ .each(res.err、機能(I、J){
                     / * * IF(I ==' __ __すべて「){ 
                        $を...( '#id_r_p')次()HTML(J [0])CSS( '色'、 '赤')親()addClass( 'はエラー'); .. 
                    }他{ 
                        $(「# _ ID '.. + I).next()HTML(J [0])CSS('色''レッド・エラーが持つ) ')親()addClass(..'; 

                    } * * / 
                    // エラースパン情報が生成に表示されます
                     ($ ' #id_ ' + I).next()。0 。])、CSS(' ' ' ' ).parent()addClass(' エラーを有しています' ); 
                 }); 
                } 
             } 
        })。

    }); 
    </ スクリプト>

 

【0002】パイソン

  2.1対はユーザテーブル拡張アセンブリフィールドをジャンゴ

  (1)モデルのユーザーテーブルに新しいフィールドを追加

django.db 輸入モデル
 から django.contrib.auth.models インポートAbstractUser 

#がここにあなたのモデルを作成します。
クラスUSER_INFO(AbstractUser):
    TEL = models.CharField(MAX_LENGTH = 32)

   (2)変更のユーザ認証テーブルの設定情報のコンポーネントを設定します

AUTH_USER_MODEL='app01.user_info'

      修改之后需重新迁移数据库,如果无需添加新字段可省去上述步骤,直接使用django默认提供的auth_user表

 

    2.2  业务代码

from django.http import JsonResponse
from django import forms
from app01.models import user_info
from django.core.exceptions import ValidationError
import re
from django.forms import widgets

#注册视图函数
def register(request):
    if request.method=='GET':
        form=UserForm()
        return render(request,'register.html',locals())
    elif request.method=="POST":
        res={"user":None,'err':""}
        form=UserForm(request.POST)
        #验证用户信息
        if form.is_valid():
            res['user']=form.cleaned_data.get('user')
            user=form.cleaned_data.get('user')
            pwd=form.cleaned_data.get('pwd')
            email=form.cleaned_data.get('email')
            user_info.objects.create_user(username=user,password=pwd,email=email)
        else:
            res['err']=form.errors
        return JsonResponse(res)

#创建验证规则对象
class UserForm(forms.Form):
    user=forms.CharField(max_length=32,label='用户名')
    #widget = widgets.PasswordInput()前端密码密文显示
    pwd=forms.CharField(max_length=32,label='密码',widget=widgets.PasswordInput())
    r_pwd=forms.CharField(max_length=32,label='确认密码',widget=widgets.PasswordInput())
    email=forms.EmailField(max_length=32,label='邮箱')
    #使页面渲染时增加需要的属性
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        for filed in self.fields.values():
            filed.widget.attrs.update({'class':"form-control"})
    #设置钩子,对相应的验证框添加新的验证规则(不一定会被执行)
    def clean_user(self):
        val=self.cleaned_data.get('user')
        user=user_info.objects.filter(username=val).first()
        if user:
            raise ValidationError('用户已存在')
        else:
            return val
    def clean_pwd(self):
        val = self.cleaned_data.get('pwd')
        if val.isdigit():
            raise ValidationError('密码不能为纯数字')
        else:
            return val
    def clean_email(self):
        val=self.cleaned_data.get('email')
        if re.search('\[email protected]$',val):
            return val
        else:
            raise ValidationError('必须为163邮箱')

    # 全局钩子,此方法一定会被执行
    def clean(self):
        pwd=self.cleaned_data.get('pwd')
        r_pwd=self.cleaned_data.get('r_pwd')
        if pwd and r_pwd and pwd!=r_pwd:
            # raise ValidationError('密码不一致')
            self.add_error('r_pwd',ValidationError('两次密码不一致'))
        else:
            return self.cleaned_data

 

おすすめ

転載: www.cnblogs.com/wangdamao/p/11564485.html