django实现用户的注册、登录、注销功能
创建django项目的步骤:Django项目的创建步骤-CSDN博客
一、前置工作
配置数据库,设置数据库引擎为mysql
1、在settings文件中找到DATABASES, 配置以下内容
DATABASES = {"default": {'ENGINE': 'django.db.backends.mysql', # 数据库引擎'NAME': 'django_test', # 连接的数据库, 一定要存在'HOST': '127.0.0.1', # mysql的ip地址, 这里是本地'PORT': 3306, # mysql的默认端口'USER': 'root', # mysql的用户名'PASSWORD': 'xxx' # mysql的密码}
} 可能会提示以下内容:

安装即可: pip install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple
二、编写用户模型
django中使用ORM来存数据到数据库
ORM模型(对象关系映射):
一个 模型类对应数据库中的一张表
一个属性对应数据库中的一个字段
用户表的字段:用户名、密码(可以自己扩展)
1、用户模型
2、创建好模型后要执行迁移数据的命令:
生成迁移文件:python manage.py makemigrations
迁移生效(同步到数据库):python manage.py migrate
3、迁移成功后,migrations文件夹下会出现迁移文件,该文件记录着模型的相关信息,001表示第一次迁移.
三、编写表单校验,以注册表单校验为例
使用django自带的Form类来实现校验
1、对字段的校验,这里只截了用户名的校验,其他字段都差不多

2、对整个表单的校验:
User需要从models.py文件中导入

3、form表单中自定义的其他方法:

四、编写前端页面,纯html,文件写在templates文件夹中
使用了模板的方式嵌入数据
超链接的跳转连接:{% url "命名空间:路由的name值" %},有命名空间一定要标注命名空间,没有则:{% url "路由的name值" %}
1、index.html
2、register.html
form.non_field_errors:表当校验时,表单的错误,就是forms.py文件中的
raise forms.ValidationError("错误信息")。
form.errors.username: 表单校验时,用户名的错误,就是forms.py文件中的error_messages信息,密码校验也是如此。
3、login.html
五、编写视图类来实现登录、注册功能
如果是get请求就执行get方法,是post请求就执行post方法,在form标签中的methos方法中可以指定。
form.is_valid():用来校验表单,校验成功返回True, 失败则返回False。
post的方法的实例化表单对象:实例化表单对象时一定要加request.POST,否则拿不到数据。
redirect: 重定向到其他视图函数。
form对象:实例化表单对象,用来进行表单的各种存在,校验,错误信息等待
request.session['username'] = request.POST['username']: 设置session值为用户名(其他值也可以)
六、编写首页和注销视图函数
1、首页函数
request.session.get():通过注册时设置的session中来获取用户,通过这个判断是否有登录的用户,可以与前端交互,有的话就显示注销,没有的话显示注册和登录
2、注销函数
清除session值即可
七、编写路由
1、在主路由中include分路由,并设置命名空间
命名空间:当有多个应用时建议用, 能更好的区分各个应用,使用namespace关键字设置
2、在app下创建一个urls.py文件,编写以下内容
注意:一定要加app_name, 视图类一定要加.as_view()
八、django自带的管理后台
使用python manage.py createtsuperuser创建超级用户
1、在admin.py文件中注册模型
list_display:在后台管理中要显示的字段
admin.site.site_header:后台管理的标题
2、在模型(models.py)中添加
3、使用注册的超级用户登录
九、具体的文件
1、models.py
from django.db import modelsclass User(models.Model):# 定义变量,对应数据库的表的字段# username参数:参数1:后台管理显示的内容,参数2:最大长度, CharField类型必须指定,参数3:不能为空,参数4:唯一username = models.CharField('用户名', max_length=10, null=False, unique=True)password = models.CharField('密码', max_length=255, null=False)# create_time参数:参数2:记录数据第一次创建的时间,自动记录到数据库create_time = models.DateTimeField('注册时间', auto_now_add=True)# 设置后台管理class Meta:app_label = 'app' # 属于那个appverbose_name = '用户'verbose_name_plural = verbose_name# 输出对象时用到的def __str__(self):return self.username
2、forms.py
from django import forms
from .models import Userclass RegisterForm(forms.Form):# 用户名username = forms.CharField(required=True, # 不能为空,必须max_length=10, # 最大长度min_length=4, # 最小长度error_messages={'required': "不能为空",'max_length': "长度不能大于10",'min_length': "长度不能小于4",})# 密码password = forms.CharField(required=True, # 不能为空,必须max_length=16, # 最大长度min_length=8, # 最小长度error_messages={'required': "不能为空",'max_length': "长度不能大于16",'min_length': "长度不能小于8",})# 校验def clean(self):# 获取输入的用户名username = self.cleaned_data.get('username')user = User.objects.filter(username=username) # 获得一个查询集,可以理解为一个列表# 用户存在if user.exists():raise forms.ValidationError("用户已存在")return self.cleaned_data# 存入数据库def save(self):username = self.cleaned_data.get('username')password = self.cleaned_data.get('password')# 存入数据库user = User(username=username, password=password)user.save()class LoginForm(forms.Form):# 用户名username = forms.CharField(required=True, # 不能为空,必须max_length=10, # 最大长度min_length=4, # 最小长度error_messages={'required': "不能为空",'max_length': "长度不能大于10",'min_length': "长度不能小于4",})# 密码password = forms.CharField(required=True, # 不能为空,必须max_length=16, # 最大长度min_length=8, # 最小长度error_messages={'required': "不能为空",'max_length': "长度不能大于16",'min_length': "长度不能小于8",})# 校验def clean(self):# 获取输入的信息username = self.cleaned_data.get('username')password = self.cleaned_data.get('password')user = User.objects.filter(username=username) # 获得一个查询集,可以理解为一个列表if user.exists():if user[0].password != password:raise forms.ValidationError("密码错误")else:raise forms.ValidationError("用户不存在")return self.cleaned_data
3、admin.py
from django.contrib import admin
from .models import User# Register your models here.
@admin.register(User)
class UserAdmin(admin.ModelAdmin):list_display = ['id', 'username', 'create_time']admin.site.site_header = 'django后台管理'
4、views.py
from django.shortcuts import render, HttpResponse, redirect
from django.views import View
from .models import User
from .forms import RegisterForm, LoginForm# Create your views here.def index(request):username = request.session.get('username', default=0) # 通过session获取用户名,给默认值防止报错user = User.objects.filter(username=username).first()return render(request, 'index.html', {'user': user})class RegisterView(View):def get(self, request):form = RegisterForm()return render(request, 'register.html', {'form': form})def post(self, request):form = RegisterForm(request.POST)if form.is_valid():form.save()return redirect('app:login')return render(request, 'register.html', {'form': form})class LoginView(View):def get(self, request):form = LoginForm()return render(request, 'login.html', {'form': form})def post(self, request):form = LoginForm(request.POST)print("登录")if form.is_valid():# 设置sessionrequest.session['username'] = request.POST['username']return redirect('app:index')return render(request, 'login.html', {'form': form})# 注销
def Logout(request):request.session.clear() # 清除sessionreturn redirect('app:index')
5、app中的urls.py
from django.urls import path
from .views import *app_name = 'app'urlpatterns = [path('', index, name='index'), # 首页path('register/', RegisterView.as_view(), name='register'), # 注册path('login/', LoginView.as_view(), name='login'), # 登录path('logout', Logout, name='logout'), # 注销
]
6、主路由urls.py
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path("admin/", admin.site.urls),path('', include('app.urls', namespace='app'))
]
7、index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body>{% if user %}<h1>欢迎{{ user.username }}进入首页!!!</h1><a href="{% url 'app:logout' %}">注销</a>
{% else %}<h1>请注册或登录</h1><a href="{% url 'app:register' %}">注册</a><a href="{% url 'app:login' %}">登录</a>
{% endif %}</body>
</html>
8、register.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册</title>
</head>
<body>
<h3>注册</h3>
<a href="{% url 'app:login' %}">登录</a>|
<a href="{% url 'app:index' %}">首页</a>
<form action="{% url 'app:register' %}" method="post">{% csrf_token %}<div><p style="color: red">{{ form.non_field_errors }}</p></div><div><lable>用户名</lable><label><input type="text" name="username"></label><p style="color: red">{{ form.errors.username }}</p></div><div><lable>密码</lable><label><input type="password" name="password"><p style="color: red">{{ form.errors.password }}</p></label></div><button type="submit">注册</button>
</form>
</body></html>
9、login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body>
<h3>登录</h3>
<a href="{% url 'app:register' %}">注册</a>|
<a href="{% url 'app:index' %}">首页</a>
<form action="{% url 'app:login' %}" method="post">{% csrf_token %}<div><p style="color: red">{{ form.non_field_errors }}</p></div><div><lable>用户名</lable><label><input type="text" name="username"><p style="color: red">{{ form.errors.username }}</p></label></div><div><lable>密码</lable><label><input type="password" name="password"><p style="color: red">{{ form.errors.password }}</p></label></div><button>登录</button>
</form></body>
</html>
相关文章:
django实现用户的注册、登录、注销功能
创建django项目的步骤:Django项目的创建步骤-CSDN博客 一、前置工作 配置数据库,设置数据库引擎为mysql 1、在settings文件中找到DATABASES, 配置以下内容 DATABASES {"default": {ENGINE: django.db.backends.mysql, # 数据库引擎NAME: dja…...
【JAVA 常用API】数据库字段存储JSON格式数据,JAVA中如何将List<Entity>或者对象实体转换为字符串
在Java中,可以使用第三方库如Jackson或Gson来进行JSON的转换。这些库提供了将Java对象转换为JSON字符串的方法。 一:Gson API转Json Getter Setter NoArgsConstructor AllArgsConstructor ToString Builder public class Person {private String name;p…...
AI算不出9.11和9.9哪个大?六家大模型厂商总结了这些原因
大模型“答对”或“答错”其实是个概率问题。关于“9.11和9.9哪个大”,这样一道小学生难度的数学题难倒了一众海内外AI大模型。7月17日,第一财经报道了国内外“12个大模型8个都会答错”这道题的现象,大模型的数学能力引发讨论。 “从技术人员…...
MacBook电脑远程连接Linux系统的服务器方法
一、问题简介 Windows 操作系统的电脑可使用Xshell等功能强大的远程连接软件。通过连接软件,用户可以在一台电脑上访问并控制另一台远程计算机。这对于远程技术支持、远程办公等场景非常有用。但是MacBook电脑的macOS无法使用Xshell。 在Mac上远程连接到Windows服…...
CSS-0_3 CSS和单位
文章目录 CSS的值和单位属性值长度单位CSS和绝对单位CSS和相对单位百分比em & rem视口 颜色单位 碎碎念 CSS的值和单位 我们知道,CSS是由属性和属性值所组成的表 随着CSS的发展,属性不说几千也有几百,我从来不支持去背诵所有的可能性。…...
【代码随想录|贪心算法 455. 分发饼干 376. 摆动序列 53. 最大子数组和】
代码随想录|贪心算法 455. 分发饼干 一、455. 分发饼干1.代码2.问题 二、376. 摆动序列1.代码 三、53. 最大子数组和1.代码 总结 python 一、455. 分发饼干 455. 分发饼干 1.代码 代码如下(示例): class Solution:def findContentChildr…...
swift小知识点(二)
1、 Swift 枚举 Swift 中使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内: enum enumname {// 枚举定义放在这里 } 如下事例: // 定义枚举 enum DaysofaWeek {case Sundaycase Mondaycase TUESDAYcase WEDNESDAYcase THURSDAYcase…...
机器人产业发展格局多元化,创业公司突破瓶颈需多维施策
当前,机器人产业的发展格局呈现出多元化、快速增长和技术不断创新的特点。从全球视角来看,机器人市场持续增长,预计到2026年全球人形机器人市场规模将超过20亿美元,到2030年有望突破200亿美元,显示出巨大的市场潜力和发…...
接口测试JMeter-1.接口测试初识
第一章 接口测试初识 1. 接口测试理论基础 “接口测试”一个让人觉得非常高大上的名词,特别是对于刚入门的测试同学而言。随着测试技术不断的深化,“接口测试”出现在我们视野中的频次越来越高。那么接口测试到底是如何做的?接口测试的优势又…...
[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-22 TPG图像测试数据发生器设计
软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…...
如何通过企业微信会话存档保护企业利益?
赵总: 张经理,最近行业内频发数据泄露事件,我们的客户资料和内部沟通记录安全吗? 张经理: 赵总,我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录,我们最近引入了安企神软件,它能很…...
git修改提交姓名
git config --global user.name “新用户名” git config --global user.email “新邮箱地址” 修改提交的用户名 git config --global user.name “yu***”...
5、在共享内存无指针编程:句柄HANDLE转换为指针
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 共享内存里面不能用指针&#…...
hive动态分区导致xceivercount超限,hdfs无法创建新连接
目录 一、事件复盘: 二、解决方案: 三、讨论 一、事件复盘: hdfs无法创建新的文件,xceivercount超过最大设置,平时每个datanode只有100个左右的连接,突然达到8000以上。 事故原因,跨多天的…...
如何识别Android init 中的缓慢操作
Android 14 开机时间优化措施汇总-CSDN博客 Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客Android系统设置kernel log level的…...
JVM:常用工具总结
文章目录 一、jstat工具 一、jstat工具 Jstat工具是JDK自带的一款监控工具,可以提供各种垃圾回收、类加载、编译信息等不同的数据。使用方法为:jstat -gc进程ID每次统计的时间间隔(毫秒)统计次数。 C代表Capacity容量,…...
二染色,CF 1594D - The Number of Imposters
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1594D - The Number of Imposters 二、解题报告 1、思路分析 并查集&…...
Go语言并发编程-Channel通信_2
Channel通信 Channel概述 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中,多个线程传递数据的方式一般都是共享内存,而Go语言中多Goroutine通信的主要方案是Cha…...
Richteck立锜科技电源管理芯片简介及器件选择指南
一、电源管理简介 电源管理组件的选择和应用本身的电源输入和输出条件是高度关联的。 输入电源是交流或直流?需求的输出电压比输入电压高或是低?负载电流多大?系统是否对噪讯非常敏感?也许系统需要的是恒流而不是稳压 (例如 LED…...
Socket 简介与 Java Socket 编程示例
Socket(套接字)是网络通信中的一个关键概念,它是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 一、定义与概念 基本概念:Socket可以被视为网络环境中进程间通信的API(应用程序编程接口)&…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
DeepSeek越强,Kimi越慌?
被DeepSeek吊打的Kimi,还有多少人在用? 去年,月之暗面创始人杨植麟别提有多风光了。90后清华学霸,国产大模型六小虎之一,手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水,单月光是投流就花费2个亿。 疯…...
