分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Django认证系统实现的web页面

发布时间:2023-09-06 02:10责任编辑:顾先生关键词:暂无标签

在学习了Django认证系统后,对于利用Django实现web开发的流程有了初步了解。结合这一段时间的所学,做了个web页面。结合数据库、ajax、js、Djangoform表单和认证系统等

一:数据模块

扩展了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"> ???<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/">修改密码</a> ???????????<a class="btn btn-danger pull-right" href="/logout/">注销</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

Django认证系统实现的web页面

原文地址:https://www.cnblogs.com/li1992/p/9248152.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved