贵阳网站建设钟鼎网络,大连网站维护,你是怎么理解的,网页制作与网站制作1、创建数据库的管理员表
在models.py 中定义admin表#xff0c;为了简单#xff0c;表里只有用户名和密码还有默认加的id 三个字段
from django.db import models# Create your models here.class Admin(models.Model):username models.CharField(verbose_name用户…1、创建数据库的管理员表
在models.py 中定义admin表为了简单表里只有用户名和密码还有默认加的id 三个字段
from django.db import models# Create your models here.class Admin(models.Model):username models.CharField(verbose_name用户名,max_length16)passwd models.CharField(verbose_name密码,max_length64)
执行创建表的语句
py -3 manage.py makemigrations
py -3 manage.py migrate然后自己手动插入一些用户
2、登录界面和登录视图
在urls.py中加入路径
from django.urls import path
from app01.views import user,depart,pretty,admin,accounturlpatterns [#path(admin/, admin.site.urls),path(depart/list/, depart.depart_list),path(depart/add/, depart.depart_add),path(depart/delete/, depart.depart_delete),#http://127.0.0.1:8000/depart/2/edit/path(depart/int:nid/edit/, depart.depart_edit),path(user/list/, user.user_list),path(user/add/, user.user_add),path(user/int:nid/edit/, user.user_edit),path(user/int:nid/delete/, user.user_delete),path(pretty/list/, pretty.pretty_list),path(pretty/add/, pretty.pretty_add),path(pretty/int:nid/edit/, pretty.pretty_edit),path(pretty/int:nid/delete/, pretty.pretty_delete),path(admin/add/, admin.admin_add),path(admin/list/, admin.admin_list),path(admin/int:nid/edit/,admin.admin_edit),path(login/account/,account.login), #这个是登录的
]在写登录的视图函数account.py 我把不同模块的视图函数拆分了不同功能模块的一个py文件在app01目录下创建目录views, 在views目录下分类写视图函数主要要把原始的views.py文件删除 登录使用的Form组件 获取到用户输入的数据后要对数据进行校验根数据库里面的值 再有如果验证通过要request.session 通过这个生成session, django会自动处理生成一个session保存到数据库并把这个session返回给浏览器。
from django.shortcuts import render,redirect
from django import forms
from app01.utils.encrypt import md5
from app01 import modelsclass LoginForm(forms.Form):username forms.CharField(label用户名,widgetforms.TextInput,requiredTrue,)passwd forms.CharField(label密码,widgetforms.PasswordInput(render_valueTrue),requiredTrue)# 这个init方式是给自己加样式的def __init__(self, *args,**kwargs):super().__init__(*args,**kwargs)for name ,field in self.fields.items():#字段中有属性保留原来的属性没有属性才增加if field.widget.attrs:field.widget.attrs[class] form-controlfield.widget.attrs[placeholder] field.labelelse:field.widget.attrs {class:form-control}def login(request):用户登录if request.method GET:form LoginForm()return render(request,login.html,{form:form})form LoginForm(datarequest.POST)if form.is_valid():#print(form.cleaned_data) #获取到的值是一个字典{username: root, passwd: 1234}#校验数据库的用户名和密码admin_object models.Admin.objects.filter(**form.cleaned_data).first()if not admin_object:form.add_error(passwd,用户名或密码错误)return render(request,login.html,{form:form})#用户名和密码正确#网站生成随机字符串 写到用户浏览器的cookie中再写入到session中request.session[info] {id:admin_object.id,name:admin_object.username}return redirect(/admin/list/)return render(request,login.html,{form:form})login.html 的内容
{% load static %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/titlelink relstylesheet href{% static plugins/bootstrap-3.4.1/css/bootstrap.min.css %}style.account {width: 400px;border-radius: 5px;border: 1px solid #dddddd;box-shadow: 5px 5px 20px #aaa;margin-left: auto;margin-right: auto;margin-top: 100px;padding: 20px 40px;}.account h2 {margin-top: 10px;text-align: center;}/style
/head
body
div classaccounth2用户登录/h2form methodpost novalidate{% csrf_token %}{% for field in form %}div classform-grouplabel {{ field.label }}/label{{ field }}span stylecolor:red{{ field.errors.0 }}/span/div{% endfor %}button typesubmit classbtn btn-primary提交/button/form/divscript src{% static js/jquery-3.7.0.min.js %}/script
script src{% static plugins/bootstrap-3.4.1/js/bootstrap.min.js %}/script
/body
/html3、中间件实现登录鉴权
在开始我们写了一个功能后把django项目运行起来直接方法url就能访问到了正常来说是只有登录后的用户才能访问到django中给我们提供了中间件可以通过中间件来实现鉴权 在django 中可以定义多个中间件中间件就是一个类类里面定义有两个函数一个是process_request进入的穿过所有的中间件到达视图函数视图函数返回结果通过process_response函数返回给浏览器
定义中间件
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirectclass AuthMiddleWare(MiddlewareMixin):中间件判断是否登录def process_request(self,request):# 1、排除那些不需要登录就能访问的页面# request.path_info 获取当前用户请求的URL ru /login/account/if request.path_info /login/account/:return# 2、读取当前访问的用户的session信息如果能读到说明以登录过就可以继续向后走info_dict request.session.get(info)if info_dict:return# 3、没有登录过重新回到登录页面return redirect(/login/account/)
使用中间件在settings.py中注册中间件 会按这个顺序执行中间件定义好后会自动调佣
MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,app01.middleware.auth.AuthMiddleWare,
]中间件添加好后你再没有登录的情况下去访问http://127.0.0.1:8000/user/list/ 这些页面会自动跳转到登录界面。