Django学习-用户鉴权系统

Django用户登录与注册系统 1.1.创建项目和appdjango-admin startproject mysite_login python manage.py startapp login1.2.设置时区和语言Django默认使用美国时间和英语,在项目的settings文件中,如下所示:LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L1... 阅读详情

Django自带了强大的后台管理应用,包括用户注册、登录及权限管理功能。

对于用户鉴权,一般在服务器端做两件事情:

1.验证用户是否是他说说的用户,且该用户是否合法。

2.验证用户所拥有的权限。

启用鉴权系统:

    1.启用session。应为用户鉴权系统需要通过session来处理用户登录等。

    2.在settings.py配置文件的INSTALLED_APPS属性中配置'django.contrib.auth'参数,启用该APP(记得同步创建数据库)

   3.在settings.py配置文件MIDDLEWARE_CLASSES属性中配置'django.contrib.auth.middleware.AuthenticationMiddleware'参数,有顺序要求,因为中间件的调用有顺序,需在session中间件后面(django2.0后也可在MIDDLEWARE属性进行配置)

使用鉴权系统:

    在视图的request参数中,有一个user属性,可以通过它来处理鉴权系统。该属性是一个User对象,若没有登录,则是一个AnonymousUser类实例对象。源码:/site-packages/django/contrib/auth/models.py

    该对象内建了很多方便的操作来处理鉴权系统。

    例:

    is_authenticated():判断用户是否已经登录。返回一个CallableTrue/CallableFalse。

    具体的操作可以查看Django源码。AnonymousUser实例模拟了部分的User实例,但不是全部,所以在request.user对象前,先判断该对象的is_authenticated()来判断是AnonymousUser实例还是User实例。

    登录登出操作:

        验证:

        Django鉴权系统提供了一个方法验证用户的用户名和密码是否正确,authenticate(),传入username,password两个参数,若用户名密码正确,则返回User对象,否则返回None。

from django.contrib import auth
user = auth.authenticate(username='john', password='secret')
# 若错误,则user为None

        该部分源码在/site-packages/django/contrib/auth/__init__.py,其实际调用了了对应后端进行验证,这个后端配置在settings的AUTHENTICATION_BACKENDS属性中,默认的全局配置为django.contrib.auth.backends.ModelBackend。

        登录:

        Django鉴权系统使用提供login()方法来进行用户登录,该方法接受一个HttpRequest对象和一个User对象作为参数,通过Django的session会话框架将用户ID保存在该会话中。注:request对象中保存了user id以及backend后端处理器。这样用户就不用在每次请求时重复验证

# 在视图中使用,视图函数接收的第一个参数为HttpRequest对象
# 通过Http请求为POST方式提交数据
def login_view(request):
    username = request.POST.get('username', '')  # 获取上传的帐号密码数据
    password = request.POST.get('password', '')
    user = auth.authenticate(username=username, password=password) # 调用authenticate()方法验证数据正确性,注意需从django.contrib中导入auth
    if user is not None and user.is_active:  # 如果authenticate验证通过且User实例对象处于活跃状态
        # Correct password, and the user is marked "active"
        auth.login(request, user)  # 调用login方法进行用户登录
        # Redirect to a success page.
        return HttpResponseRedirect("/account/loggedin/")
    else:
        # Show an error page
        return HttpResponseRedirect("/account/invalid/")

        注:login函数源码同样在/site-packages/django/contrib/auth/__init__.py中,在登录成功后,会往request.session会话中加入SESSION_KEY、BACKEND_SESSION_KEY、HASH_SESSION_KEY参数,同时若request无user对象,则会将User对象添加到request中。

        登出操作:

        Django提供logout()方法进行用户登出,该方法接受一个HttpRequest对象,并且没有返回值。且传入的请求用户中即使没有登录,登出操作也不会抛出异常。

        源码在/site-packages/django/contrib/auth/__init__.py中,logout()操作会将request中的User实例对象换成AnonymousUser实例,该实例前面已经讲过了,同时刷新request的session会话数据。从而导致下次请求时进行验证登录操作。

    注:Django提供了一套鉴权系统,可以不需要自己来开发用户登录登出操作。

    对部分视图的访问需要验证用户是否登陆:

    如果想在自己的视图中要求用户必须登录才能访问,则可以使用修饰器模式。从django.contrib.auth.decorators导入login_required,使用@修饰符来修饰对应的视图函数。该方法主要完成以下两件事情:

     1.如果用户没用登录,则路由重定向到/accounts/login/,并把当前绝对URL作为next在查询字符串中传递过去,例如/accounts/login/?next=/polls/3/

        2.如果用户已经登录,则正常执行视图函数。不需要在视图函数中在单独验证用户状态。

    对部分视图的访问需要验证用户是否有权限:

    Django的User实例对象提供了has_perm()方法来检查是否有相应权限,若有相应权限,则返回True。

    另外,Django也提供了permission_required()装饰器,可以用@修饰符来修饰视图函数。该装饰器接受一个参数“待检查的目标权限”,也可以传入一个可选参数login_url,这个参数表示若权限审核不通过则重定向的url路由。该参数默认为/accounts/login/

 

 

Django学习笔记八:开发一个登录功能——Django认证系统 到现在的学习,目前登录功能虽已实现,但是用户名和密码都是指定字符串,并没有通过一个认证系统来验证用户的真实信息。一、登录admin系统在笔记七中使用“migrate”命令进行数据迁移时,Django生成了一张auth_user表,用于存放用户信息,此用户信息可以登录Django自带的Admin管理后台。在此先创建一个admin管理后台的管理员账号。可以看到依次要求输入用户名、邮箱、密码、确认密码,... 阅读详情

相关推荐

Django学习笔记——内置用户类AbstractUser与内置认证校验系统

我们在之前讲过了View视图的作用和父类的作用,这次介绍的内置用户类Abstract.User就是Django内置的一个关于用户操作的类,我们只要使用这个类,节省很多代码。 ...

hyq的博客 3526

【2023】Django 4教程 第2篇 实践学习一:从一个简单的资源管理做起 第7章 页面和功能的实现 7.3 Django用户认证简介

【2023】Django 4教程 第2篇 实践学习一:从一个简单的资源管理做起 第7章 页面和功能的实现 7.3 Django用户认证简介

代码改变世界 538

django基于Python的自主学习系统(程序+开题)

意义: 基于Python的自主学习系统具有重要的意义。目的: 本研究的目的是设计和实现一个基于Python的自主学习系统,以提高学习者的学习效果和教师的教学质量。[3] 郭婺, 郭建, 张劲松, 石翠萍, 刘道森, 刘超. 基于Python的网络爬虫的设计与实现[J]. 信息记录材料, 2023, 24 (04): 159-162.[10] 张华, 翟新军, 胥勇, 李伟强, 杨健, 赵嘉伟, 张涛. Python在集控大数据应用的研究[J]. 价值工程, 2023, 42 (21): 84-86.

liu10665的博客 1026

django 怎么

你可以在 Django使用认证系统来进行认证系统Django 内置的一个应用,它可以帮助你处理用户账户、组和限的问题。 要在 Django使用认证系统,你需要在你的 Django 项目中包含 'django.contrib.auth' 应用。然后,你可以使用 Django 提供的视图和模板来实现登录、登出和注册功能。 你也可以自定义你的流程。你可以在你的视图函数中使用 lo...

weixin_42588877的博客 354

django 身份验证与

django 身份验证,讲述了账号密码、手机号登录验证码、双后端与JWT相关介绍

JacinLee的博客 2198

Django开发实战之登录用户登录界面实现

login.html一般需要根据自己公司的情况自己写,如果不想写,也可以继承django的登录页面,只需要在login.html页面中写入这样的内容,原有的内容删掉。但是这种方式有个弊端,如果我需要每个视图函数访问之前都需要登录,那么我就需要在每个视频函数里面都添加上面的代码,这样会很不方便,接下来引入第二种方式:装饰器。这样就可以拉,这里之所以是空白,是因为创建的这个页面本身就是空白的。2、检查中间件,比如这两个中间件,一个是用于登录,一个是用于。如果是匿名用户访问视图时,可以重定向到登录页面。

weixin_45754647的博客 1015

django实现登录和登录的

在models.py 中定义admin表,为了简单,表里只有用户名和密码还有默认加的id 三个字段执行创建表的语句然后自己手动插入一些用户

javascript_good的博客 1052

【CodingNoBorder - S3】无际软工队 - Scrum Meeting 3

无际软工队 - Scrum Meeting 3 会议概况 会议时间:2022-04-23 14:30~15:30。 会议地点:新北下沉广场。 会议内容: 讨论当前前后端进度。 后端进一步明确了API的设计和开发。 前端讨论对于VM的构造方式,进行 Code Review。 对用户及账户凭据系统的具体设计进行了研讨。 进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 NYM 前端开发。 开发中间件 完成微信小程序相关功能 无。 WJY

CodingNoBorder的博客 751

从零实现 AI 四六级单词学习系统Django + Vue 3 + FAISS RAG + 多模型 API

除了功能数量,项目更重要的成果是统一了各模块的数据关系:每日计划负责安排学习任务,学习记录负责保存掌握状态,测试记录保留历史答题结果,错题本表示当前需要解决的问题,学习看板则将这些数据重新汇总展示。项目覆盖单词学习、智能测试、错题管理、学习统计、AI 辅导、本地 RAG 知识库以及多模型配置,并重点解决了 API Key 隔离、远程模型费用风险、本地模型接入和学习状态统计等实际问题。学习状态不能仅靠“是否答错”判断。用户打开系统后进入登录页,切换到“注册”标签,填写用户名、邮箱、目标等级、密码和确认密码。

sakura1224的博客 518

python-flask-djangol框架的青少年编程学习平台

Flask适合轻量级快速开发,Django提供全栈式解决方案(含ORM、Admin等)。前端可搭配Vue.js或React实现交互,数据库选用PostgreSQL或MySQL。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。:实现用户系统、基础课程浏览和代码编辑器。:视频教程、交互式代码编辑器(集成CodeMirror)、习题库。:优化性能(缓存、异步任务),部署CI/CD流程。:注册/登录、限管理(学生/教师/家长角色)。

鹏飞的博客 30

基于深度学习的虚假评论检测系统

本文摘要记录了基于Django框架的虚假评论检测系统开发过程。主要包含:1) 项目环境配置(Python 3.7/3.9、Django 3.2.9、MySQL 8.0.27等);2) 创建Django项目及基础功能实现;3) 数据库模型设计(PL表结构)与MySQL连接配置;4) 前端模板创建和URL路由配置;5) 京东评论爬虫模块设计。项目采用MVC架构,已完成基础框架搭建和爬虫功能接口定义。

毕业作品网站 1640

python+Ai技术框架的在线学习教育系统 选课查勤请假考勤管理系统设计与研究django flask

2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。二维码(三端):可以生成一个二维码的图片,用手机扫一扫可以查看二维码里面的信息。

abo2022的博客 473

开发框架Django REST framework的应用场景

开发框架是一种用于实现身份验证和授的软件开发工具。它可以帮助开发者快速构建安全、可靠的身份验证和授系统,提高开发效率,降低开发难度。开发框架通常包括用户管理、限控制、会话管理、安全策略等功能模块,支持多种认证方式,如用户名密码、短信验证码、第三方登录等。

杨荧的CSDN博客 1204

基于 Django 3.2 VUE nginx 框架开发 机器学习在线 系统

文章大纲简介上传文件 前后端分离数据模型接口用户管理JWT测试链接 postman 简介 django 简体中文文档 上传文件 前后端分离 我们可以吧每次输入的内容,或者上传的文件 从上传接口中写入 数据库 我们目前使用的前后端开发流程一般尽量使用 前后端分离的架构,即 :前后端分离模型指的是后端只负责返回数据,不再负责渲染页面。前端负责渲染数据。 如果报错:Forbidden (CSRF cookie not set.) 则在 setting.py 中注释:‘django.middlewar

shiter编写程序的艺术 895

Django学习2-用户管理系统(简单部门管理、用户管理)

通过一个简单的案例,对所学知识 进行回顾,创建项目—创建app—创建数据库—数据库和前端界面的交互....

weixin_48137421的博客 4083

Python + Django入门:构建用户登录系统

为了实现上述功能,我们需要设计一个灵活且安全的系统架构。一般来说,用户登录应用的架构可以分为以下几个部分:模型层(Models):定义用户的数据模型,包括用户信息和密码等。在Django中,我们通常使用内置的User模型或自定义模型来保存用户信息。视图层(Views):处理用户的请求,比如处理登录、注册、登出等请求。视图层将与模型层交互,进行数据操作,并返回适当的响应。表单层(Forms):提供用户输入数据的界面,并进行数据验证。在Django中,我们可以使用Form。

weixin_36369848的博客 905

django基于Python可视化的学习系统的设计与实现

可视化的学习系统设计过程中采用Python开发语言,B/S结构,采取 django框架,并以MySql为数据库进行开发。结合以上技术,对本系统的整体、数据库、功能模块、系统页面以及系统程序等设计进行了详细的研究与规划。2.1 PYTHON语言简介Python是由荷兰数学和计算机研究学会的吉多•范罗苏姆于20世纪90年代设计的一款高级语言。Python优雅的语法和动态类型,以及解释型语言的本质,使它成为许多领域脚本编写和快速开发应用的首选语言。

qq_1406299528的博客 1436

基于django深度学习的淘宝用户购物可视化与行为预测系统设计

淘宝作为中国最大的电商平台之一,积累了海量用户行为数据(如浏览、搜索、购买记录)。传统的数据分析工具难以挖掘深层规律,而深度学习技术能够从高维数据中提取特征,结合可视化技术可直观展示用户行为模式。搭配Django REST framework构建API接口,支持前后端分离架构。系统应采用Redis缓存高频访问数据,使用Celery异步处理预测任务,通过Nginx实现负载均衡。完整系统需要结合Django Channels实现实时行为数据推送,并通过Redis缓存高频预测请求以提升性能。

2501_93025599的博客 957
上一篇: Django学习-cookie和seesion
下一篇: Django学习-缓存机制
Nnewbie
博客等级 码龄8年 2粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值