用Django内置form组件实现注册
生活随笔
收集整理的這篇文章主要介紹了
用Django内置form组件实现注册
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HTML頁面代碼塊:
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5
6 <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
7 <title>首頁</title>
8 </head>
9 <body>
10
11 <div class="container">
12 <div class="row">
13 <div class="col-md-6 col-md-offset-3">
14 <form action="/index/" method="post" novalidate>
15 {% csrf_token %}
16 <div class="form-group {% if reg.user.errors.0 %} has-error {% endif %}">
17 {{ reg.user.label }}
18 {{ reg.user }}
19 <span class="help-block" id="s1">{{ reg.user.errors.0 }}</span>
20 </div>
21 <div class="form-group {% if reg.psd.errors.0 %} has-error {% endif %}">
22 {{ reg.psd.label }}
23 {{ reg.psd }}
24 <span class="help-block">{{ reg.psd.errors.0 }}</span>
25 </div>
26 <div class="form-group {% if reg.re_pwd.errors.0 %} has-error {% endif %}">
27 {{ reg.re_pwd.label }}
28 {{ reg.re_pwd }}
29 <span class="help-block">{{ reg.re_pwd.errors.0 }}</span>
30 </div>
31 <div class="form-group {% if reg.email.errors.0 %} has-error {% endif %}">
32 {{ reg.email.label }}
33 {{ reg.email }}
34 <span class="help-block">{{ reg.email.errors.0 }}</span>
35 </div>
36 <div class="form-group {% if reg.mobile.errors.0 %} has-error {% endif %}">
37 {{ reg.mobile.label }}
38 {{ reg.mobile }}
39 <span class="help-block">{{ reg.mobile.errors.0 }}</span>
40 </div>
41
42 <div class="form-group {% if reg.city.errors.0 %} has-error {% endif %}">
43 {{ reg.city.label }}
44 {{ reg.city }}
45 <span class="help-block">{{ reg.city.errors.0 }}</span>
46 </div>
47 <div class="form-group">
48 <button type="submit" class="btn btn-success">登錄</button>
49 </div>
50
51 </form>
52 </div>
53 </div>
54
55 </div>
56
57 <script src="/static/jquery-3.3.1.min.js"></script>
58 <script src="/static/csrf_ajax.js"></script>
59 <script src="/static/bootstrap/js/bootstrap.min.js"></script>
60 <script>
61 $("#id_user").on ('input',function () {
62 var user=$(this).val();
63 $("#s1").text('');
64 $.ajax({
65 url:'/check/',
66 type:'POST',
67 data:{"user":user},
68 datatype:'json',
69 success:function (arg) {
70 if (arg){
71
72 $("#s1").text(arg).css("color", "red");
73
74 }
75
76 }
77 })
78 })
79 </script>
80 </body>
81 </html> views代碼塊的邏輯處理:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1 from django.shortcuts import render,redirect,HttpResponse
2
3 # Create your views here.
4
5 from appfind import models
6
7 def check(request):
8 if request.method=="POST":
9 user=request.POST.get('user')
10 user_obj=models.UserInfo.objects.filter(user=user)
11 if user_obj:
12 msg='用戶名已存在。請更換!'
13 else:
14 msg=''
15 return HttpResponse(msg)
16
17 from django import forms
18 from django.forms import widgets
19 from django.core.validators import RegexValidator
20 from django.core.exceptions import ValidationError
21 class RegForm(forms.Form): #利用RegForm去生成HTML字段標簽
22 user=forms.CharField(max_length=32,label='用戶名',
23 error_messages={"required": "該字段不能為空",},
24 widget=widgets.TextInput(attrs={'class':'form-control'}))
25 psd=forms.CharField(label='密碼',min_length=6,max_length=30,
26 widget=widgets.PasswordInput(attrs={'class':'form-control'},render_value=True),
27 error_messages={'min_length':'密碼不能少于6位',
28 "max_length": "密碼最長30位!",
29 "required": "該字段不能為空",})
30 re_pwd = forms.CharField(label='確認密碼', min_length=6, max_length=30,
31 widget=widgets.PasswordInput(attrs={'class': 'form-control'}, render_value=True),
32 error_messages={'min_length': '密碼不能少于6位',
33 "max_length": "密碼最長30位!",
34 "required": "該字段不能為空", })
35 email=forms.EmailField( label="郵箱",
36 widget=widgets.EmailInput(attrs={"class": "form-control"}),
37 error_messages={
38 "required": "該字段不能為空",
39 })
40 mobile = forms.CharField(label="手機",
41 validators=[
42 RegexValidator(r'^[0-9]+$','手機號碼必須是數字'),
43 RegexValidator(r'^1[3-8][0-9]{9}$','手機格式有誤')
44 ],
45 widget=widgets.TextInput(attrs={"class": "form-control"}),
46 error_messages={
47 "required": "該字段不能為空",
48 })
49 def clean_user(self): #clean_user user 就是要檢驗的字段
50 value=self.cleaned_data.get('user')
51 if "獨裁" in value:
52 raise ValidationError("不符合社會主義核心價值觀!")
53 return value
54
55 def clean(self): #重寫父類的clean方法
56 # 此時 通過檢驗的字段的數據都保存在 self.cleaned_data
57 psd=self.cleaned_data.get('psd')
58 re_pwd=self.cleaned_data.get('re_pwd')
59 if psd != re_pwd:
60 self.add_error('re_pwd',ValidationError('兩次密碼不一致'))
61 raise ValidationError('兩次密碼不一致')
62 return self.cleaned_data
63
64 city=forms.ChoiceField(
65 choices=models.City.objects.all().values_list('id','name'),
66 label='城市',
67 initial=1,
68 widget=forms.widgets.Select
69 )
70
71 def __init__(self,*args,**kwargs): #重寫父類的__init__方法
72 super().__init__(*args,**kwargs) #每次初始化加載插件就重新再數據庫里取值
73 self.fields['city'].widget.choices=models.City.objects.all().values_list('id','name')
74
75 def index(request):
76 regform=RegForm() #實例化一個RegForm對象
77 if request.method=="POST":
78 regform = RegForm(request.POST) #獲取對象
79 if regform.is_valid(): #校驗對象的所有字段
80 del regform.cleaned_data['re_pwd'] #刪除部分用戶表不需要存儲的字段
81 del regform.cleaned_data['city']
82 models.UserInfo.objects.create(**regform.cleaned_data) #數據庫添加用戶數據
83 return HttpResponse('恭喜,注冊成功!')
84
85 return render(request,'index.html',{'reg':regform})
86 #get請求直接把RegForm對象傳給頁面 ?
轉載于:https://www.cnblogs.com/wen-kang/p/9635332.html
總結
以上是生活随笔為你收集整理的用Django内置form组件实现注册的全部內容,希望文章能夠幫你解決所遇到的問題。