侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

框架(架构)  /  管理员 发布于 7年前   165

结合数据库、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="https: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="https:modify_pwd/" rel="external nofollow" >修改密码</a>   <a class="btn btn-danger pull-right" href="https:logout/" rel="external nofollow" >注销</a>  </div> </div></div><script src="https:static/jquery-3.3.1.min.js"></script><script src="https:static/bootstrap-3.3.7/js/bootstrap.min.js"></script></body></html>home.html

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


  • 上一条:
    Django命名URL和反向解析URL实现解析
    下一条:
    django 自定义过滤器(filter)处理较为复杂的变量方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客