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 用户详细信息