首页 > 用Django内置form组件实现注册

用Django内置form组件实现注册

HTML页面代码块:

 1 
 2 "en">
 3 
 4     "UTF-8">
 5 
 6     "stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
 7     首页
 8 
 9 
10 
11 
class="container"> 12
class="row"> 13
class="col-md-6 col-md-offset-3"> 14
"/index/" method="post" novalidate> 15 {% csrf_token %} 16
class="form-group {% if reg.user.errors.0 %} has-error {% endif %}"> 17 { { reg.user.label }} 18 { { reg.user }} 19 class="help-block" id="s1">{ { reg.user.errors.0 }} 20
21
class="form-group {% if reg.psd.errors.0 %} has-error {% endif %}"> 22 { { reg.psd.label }} 23 { { reg.psd }} 24 class="help-block">{ { reg.psd.errors.0 }} 25
26
class="form-group {% if reg.re_pwd.errors.0 %} has-error {% endif %}"> 27 { { reg.re_pwd.label }} 28 { { reg.re_pwd }} 29 class="help-block">{ { reg.re_pwd.errors.0 }} 30
31
class="form-group {% if reg.email.errors.0 %} has-error {% endif %}"> 32 { { reg.email.label }} 33 { { reg.email }} 34 class="help-block">{ { reg.email.errors.0 }} 35
36
class="form-group {% if reg.mobile.errors.0 %} has-error {% endif %}"> 37 { { reg.mobile.label }} 38 { { reg.mobile }} 39 class="help-block">{ { reg.mobile.errors.0 }} 40
41 42
class="form-group {% if reg.city.errors.0 %} has-error {% endif %}"> 43 { { reg.city.label }} 44 { { reg.city }} 45 class="help-block">{ { reg.city.errors.0 }} 46
47
class="form-group"> 48 49
50 51
52
53
54 55
56 57 58 59 60 80 81

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

更多相关:

  • 在C++有两种字符串流,一种在sstream中定义, 另一种在strstream中定义。 它们实现的东西基本一样。 strstream里包含 class strstreambuf; class istrstream; class ostrstream; class strstream; 它们是基于C类型字符串char*编写的...

  • 此文章完成度【100%】留着以后忘记的回顾。多写多练多思考,我会努力写出有意思的demo,如果知识点有错误、误导,欢迎大家在评论处写下你的感想或者纠错。     ORM介绍:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程...

  • Bootstrap框架和inconfont、font-awesome使用 iconfont的使用:https://www.cnblogs.com/clschao/articles/10387580.html Bootstrap介绍   Bootstrap是Twitter开源的基于HTML、CSS、JavaScript的前端框架。  ...

  • Log4j->SLF4j->Logback是同一个人开发的 import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.Spr...

  •