首页 > 编程 > Python > 正文

Django认证系统实现的web页面实现代码

2019-11-25 12:01:21
字体:
来源:转载
供稿:网友

结合数据库、ajax、js、Djangoform表单和认证系统的web页面

一:数据模块

扩展了Django中的user表,增加了自定义的字段

from django.db import modelsfrom django.contrib.auth.models import AbstractUser# Create your models here.class UserInfo(AbstractUser): phone = models.CharField(max_length=11) gender = models.CharField(max_length=2)

二:路由系统

from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = [ 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),]

三:视图系统

from django.shortcuts import render, redirectfrom django.contrib.auth.decorators import login_requiredfrom django.http import JsonResponsefrom django.contrib.auth import authenticate, login,logoutfrom app01 import formsfrom app01.models import UserInfo# Create your views here.def register(request): form_obj = forms.Reg_form() if request.method == 'POST':  form_obj = forms.Reg_form(request.POST)  if form_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']   )   return redirect('/login/') return render(request, "register.html",{'form_obj':form_obj})def login_view(request): if request.method == 'POST':  username = request.POST.get('username')  pwd = request.POST.get('pwd')  user = authenticate(username=username, password=pwd)  if user:   login(request, user)   data = {'code':1}  else:   data = {'code': 0,'msg':'用户名或密码错误'}  return JsonResponse(data) return render(request, 'login.html')@login_requireddef logout_view(request): logout(request) return redirect('/login/')@login_requireddef home(request): user_id = request.session['_auth_user_id'] use_obj = request.user return render(request,'home.html',{'user':use_obj})@login_requireddef modify_pwd(request): if request.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  if user_obj.check_password(old_pwd):   if re_pwd == pwd:    user_obj.set_password(pwd)    user_obj.save()    data = {'code': 1}   else:    data = {'code': 0, 'msg': '两次输入密码不一致'}  else:   data = {'code': 0, 'msg': '原始密码输入错误'}  return JsonResponse(data) return render(request,'modify_pwd.html')

四:form表单

#!/usr/bin/env python# -*- coding: UTF-8 -*-# Author:YiJunfrom django import formsfrom app01 import modelsfrom django.forms import widgetsfrom django.core.exceptions import ValidationError # 导入异常import re# Create your views here.class Reg_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': '手机号码'}) ) def clean_phone(self):  value = self.cleaned_data['phone']  expression = re.compile('^1[3589][0-9]{9}')  if not expression.search(value).group():   raise ValidationError('请输入正确的手机号码')  else:   return value def clean_username(self):  value = self.cleaned_data['username']  if models.UserInfo.objects.filter(username=value):   raise ValidationError('用户名已经注册')  else:   return value def clean(self):  pwd = self.cleaned_data.get("pwd")  r_pwd = self.cleaned_data.get("r_pwd")  if pwd != r_pwd:   self.add_error("r_pwd", "两次输入的密码不一致!")   # 两次输入的密码不一致   raise ValidationError("两次输入的密码不一致!")  else:   self.cleaned_data.pop('r_pwd')   return self.cleaned_data

五:模板系统

注册页面

<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport"   content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css" rel="external nofollow" > <title>Document</title></head><body><div class="container"> <div class="row" style="margin-top: 50px">  <div class="panel panel-primary">   <div class="panel-heading"><h4>用户详细信息</h4></div>   <div class="panel-body">   </div>   <!-- Table -->   <div class="table-responsive">    <table class="table table-bordered">     <thead>     <tr>      <th>#</th>      <th>用户名</th>      <th>手机号码</th>      <th>上次登陆时间</th>      <th>注册时间</th>      <th>用户性别</th>     </tr>     </thead>     <tbody>     <tr>      <th scope="row">1</th>      <td>{{ user.username }}</td>      <td>{{ user.phone }}</td>      <td>{{ user.last_login|date:'Y-m-d H:i:s' }}</td>      <td>{{ user.date_joined|date:'Y-m-d H:i:s' }}</td>      <td>{{ user.gender }}</td>     </tr>     </tbody>    </table>   </div>  </div>  <div style="margin-top: 20px">   <a class="btn btn-info " href="/modify_pwd/" rel="external nofollow" >修改密码</a>   <a class="btn btn-danger pull-right" href="/logout/" rel="external nofollow" >注销</a>  </div> </div></div><script src="/static/jquery-3.3.1.min.js"></script><script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script></body></html>home.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表