Django认证系统实现的web页面实现代码
结合数据库、ajax、js、Djangoform表单和认证系统的web页面
一:数据模块
扩展了Django中的user表,增加了自定义的字段
fromdjango.dbimportmodels fromdjango.contrib.auth.modelsimportAbstractUser #Createyourmodelshere. classUserInfo(AbstractUser): phone=models.CharField(max_length=11) gender=models.CharField(max_length=2)
二:路由系统
fromdjango.conf.urlsimporturl fromdjango.contribimportadmin fromapp01importviews urlpatterns=[ url(r'^admin/',admin.site.urls), url(r'^register/',views.register), url(r'^login/',views.login_view), url(r'^home/',views.home), url(r'^logout/',views.logout_view), url(r'^modify_pwd/',views.modify_pwd), url(r'^$',views.home), ]
三:视图系统
fromdjango.shortcutsimportrender,redirect
fromdjango.contrib.auth.decoratorsimportlogin_required
fromdjango.httpimportJsonResponse
fromdjango.contrib.authimportauthenticate,login,logout
fromapp01importforms
fromapp01.modelsimportUserInfo
#Createyourviewshere.
defregister(request):
form_obj=forms.Reg_form()
ifrequest.method=='POST':
form_obj=forms.Reg_form(request.POST)
ifform_obj.is_valid():
info_dic=form_obj.cleaned_data
sex_dic={'1':'男','2':'女','3':'保密'}
info_dic['gender']=sex_dic[info_dic['gender']]
UserInfo.objects.create_user(
username=info_dic['username'],
password=info_dic['pwd'],
gender=info_dic['gender'],
phone=info_dic['phone']
)
returnredirect('/login/')
returnrender(request,"register.html",{'form_obj':form_obj})
deflogin_view(request):
ifrequest.method=='POST':
username=request.POST.get('username')
pwd=request.POST.get('pwd')
user=authenticate(username=username,password=pwd)
ifuser:
login(request,user)
data={'code':1}
else:
data={'code':0,'msg':'用户名或密码错误'}
returnJsonResponse(data)
returnrender(request,'login.html')
@login_required
deflogout_view(request):
logout(request)
returnredirect('/login/')
@login_required
defhome(request):
user_id=request.session['_auth_user_id']
use_obj=request.user
returnrender(request,'home.html',{'user':use_obj})
@login_required
defmodify_pwd(request):
ifrequest.method=='POST':
old_pwd=request.POST.get('old_pwd')
pwd=request.POST.get('pwd')
re_pwd=request.POST.get('re_pwd')
user_obj=request.user
ifuser_obj.check_password(old_pwd):
ifre_pwd==pwd:
user_obj.set_password(pwd)
user_obj.save()
data={'code':1}
else:
data={'code':0,'msg':'两次输入密码不一致'}
else:
data={'code':0,'msg':'原始密码输入错误'}
returnJsonResponse(data)
returnrender(request,'modify_pwd.html')
四:form表单
#!/usr/bin/envpython
#-*-coding:UTF-8-*-
#Author:YiJun
fromdjangoimportforms
fromapp01importmodels
fromdjango.formsimportwidgets
fromdjango.core.exceptionsimportValidationError#导入异常
importre
#Createyourviewshere.
classReg_form(forms.Form):
#用户名表单
username=forms.CharField(
min_length=4,
label="设置用户名",
error_messages={
"required":"不能为空",
"invalid":"格式错误",
"min_length":"用户名最少4个字符"
},
widget=widgets.TextInput(
attrs={
'class':"form-control",
'placeholder':'用户名'
})
)
#用户密码设置表单
pwd=forms.CharField(
min_length=6,
label="设置密码",
widget=forms.widgets.PasswordInput(
attrs={
'class':'form-control',
'placeholder':'密码'},
render_value=True,
),
error_messages={
"required":"不能为空",
"invalid":"格式错误",
"min_length":"密码至少6位"
}
)
#用户密码确认表单
r_pwd=forms.CharField(
min_length=6,
label="确认密码",
widget=forms.widgets.PasswordInput(
attrs={
'class':'form-control',
'placeholder':'确认密码'},
render_value=True,
),
error_messages={
"required":"不能为空",
"invalid":"格式错误",
"min_length":"密码至少6位"
}
)
#用户性别选择表单
gender=forms.ChoiceField(
choices=((1,"男"),(2,"女"),(3,"保密")),
label="性别",
initial=3,
widget=forms.widgets.RadioSelect
)
#用户手机号码表单
phone=forms.CharField(
label="手机号码",
max_length=11,
min_length=11,
error_messages={
"required":"不能为空",
"invalid":"格式错误",
"min_length":"手机号码至少11位",
"max_length":"手机号码最多11位",
},
widget=widgets.TextInput(attrs={'class':"form-control",'placeholder':'手机号码'})
)
defclean_phone(self):
value=self.cleaned_data['phone']
expression=re.compile('^1[3589][0-9]{9}')
ifnotexpression.search(value).group():
raiseValidationError('请输入正确的手机号码')
else:
returnvalue
defclean_username(self):
value=self.cleaned_data['username']
ifmodels.UserInfo.objects.filter(username=value):
raiseValidationError('用户名已经注册')
else:
returnvalue
defclean(self):
pwd=self.cleaned_data.get("pwd")
r_pwd=self.cleaned_data.get("r_pwd")
ifpwd!=r_pwd:
self.add_error("r_pwd","两次输入的密码不一致!")
#两次输入的密码不一致
raiseValidationError("两次输入的密码不一致!")
else:
self.cleaned_data.pop('r_pwd')
returnself.cleaned_data
五:模板系统
注册页面
Document 用户详细信息