使用Django框架自带的Form表单完成简单的用户登录注册

如果不知道怎么配置Django环境以及如何连接数据库请点击我的上一篇博客:
使用pycharm初始化Django框架并连接Sql Server

文章目录

  • 1.Django默认生成的数据表
  • 2.用户登录
    • 2.1创建登录页面
    • 2.2视图处理登录请求
    • 2.3配置访问路径
  • 3.用户注册
    • 3.1创建用户表单
    • 3.2创建注册模版页面
    • 3.3创建视图注册处理函数
    • 3.4配置 URL
  • 4.效果演示
    • 4.1注册
    • 4.2登录

1.Django默认生成的数据表

  • auth_user: 存储用户的基本信息,包括用户名、密码(加密后)、电子邮件、姓名等。这个表用于支持用户身份验证系统。
  • auth_group: 存储用户组的信息,用于对用户进行分组管理。
  • auth_permission: 存储权限信息,用于管理用户和用户组的权限。
  • auth_user_groups: 用户和用户组的关联表,用于表示用户属于哪些用户组。
  • auth_user_user_permissions: 用户和权限的关联表,用于表示用户具有哪些权限。
  • django_session: 用于存储用户会话信息,包括用户的会话密钥和会话数据。
  • django_migrations: 记录了数据库迁移的历史信息,包括迁移文件的名称、应用程序名称、迁移状态等。
  • django_content_type: 用于存储模型的元数据信息,包括模型的应用程序名称、模型名称等。
  • django_admin_log: 用于记录管理员操作日志的表,包括了对数据的增删改查等操作记录。
    这些默认数据表是 Django 框架提供的核心组件,用于支持其内置功能,如身份验证、权限管理、会话管理等。它们可以根据需要进行扩展和定制,也可以通过 Django 的 ORM(对象关系映射)来进行操作和查询。本次登录注册可以使用auth_user这张数据表来完成。

2.用户登录

2.1创建登录页面

在Django项目中template目录创建user_login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Login</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;}.login-container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 400px; /* 修改宽度 */height: 400px;margin: 20px; /* 添加外边距 */}.login-container h2 {text-align: center;}.login-container form {display: flex;flex-direction: column;}.login-container form input[type="text"],.login-container form input[type="password"] {margin-bottom: 15px;padding: 10px;margin-top: 10%;border-radius: 4px;border: 1px solid #ccc;font-size: 16px;}.login-container form input[type="submit"] {margin-top: 20%;background-color: #007bff;color: #fff;border: none;padding: 10px;border-radius: 4px;cursor: pointer;font-size: 16px;transition: background-color 0.3s ease;}.login-container form input[type="submit"]:hover {background-color: #0056b3;}</style>
</head>
<body><div class="login-container"><h2>用户登录</h2><form  method="post">{% csrf_token %}<input type="text" name="username" placeholder="Username" required><input type="password" name="password" placeholder="Password" required><input type="submit" value="Login"></form></div>
</body>
</html>

2.2视图处理登录请求

在项目目录中新建 reader_controller.py(一般命名为views.py 笔者写SpringBoot项目习惯了 以controller为结尾命名了)

def reader_login(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')if username and password:# 进行身份验证user = authenticate(username=username, password=password)if user is not None:# 读者验证成功,执行逻辑或重定向到其他页面return HttpResponse('登录成功')else:return HttpResponse('无效的凭据')else:return HttpResponseBadRequest('请提供用户名和密码')return render(request, 'user_login.html')  # 渲染 user_login.html 模板

authenticate函数详解: Django 中用于进行用户身份验证的函数。它用于验证用户提供的凭据(例如用户名和密码)是否有效,并返回相应的用户对象。

  1. 接收用户凭据: authenticate() 函数接收用户提供的凭据,通常是用户名和密码。
  2. 验证凭据: 它在数据库中查找具有提供的用户名的用户对象,然后尝试使用提供的密码对该用户进行验证。默认查询框架自带的auth_user数据表,可以在settings.py修改,改为自己的用户模型,这里以auth_user数据表举例,不过多赘述。
  3. 返回用户对象: 如果提供的凭据有效并且验证通过,authenticate() 将返回相应的用户对象。否则,它将返回 None。

2.3配置访问路径

将路径与视图处理函数进行绑定,以便进行访问页面
 path('login/', reader_controller.reader_login, name='reader_login'),

3.用户注册

3.1创建用户表单

Django 框架提供了表单组件,可以用于对页面进行初始化,生成 HTML 标签,此外还可以对用户提交的数据进行校验(显示错误信息)。在项目目录下新建forms.py文件

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import Userclass SignUpForm(UserCreationForm):email = forms.EmailField(max_length=254, help_text='必填字段')password1 = forms.CharField(label="密码",strip=False,widget=forms.PasswordInput(attrs={'autocomplete': 'new-password'}),help_text="至少8个字符")password2 = forms.CharField(label="重复输入密码",widget=forms.PasswordInput(attrs={'autocomplete': 'new-password'}),strip=False,help_text="再次输入密码")username = forms.CharField(label="用户名",help_text="必填字段")class Meta:model = Userfields = ('username', 'password1', 'password2', 'email')

这里定义了表单四个字段,并对提示进行了重载, 可以只定义 class Meta,那样显示的是默认效果。

3.2创建注册模版页面

在目录下的templates文件夹下新建signup.html

<!DOCTYPE html>
<html>
<head><title>注册</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"><!-- 引入 Bootstrap 样式表 --><style>/* 自定义额外样式 */.form-signup {max-width: 400px;margin: 0 auto;padding: 15px;border: 1px solid #ccc;border-radius: 5px;background-color: #f9f9f9;}.form-signup h2 {margin-bottom: 20px;}.form-signup label {font-weight: bold;display: block;margin-bottom: 5px; /* 调整标签和输入框之间的间距 */}.form-signup input[type="text"],.form-signup input[type="password"],.form-signup input[type="email"] {width: 100%;padding: 8px;margin-bottom: 10px;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;}.form-signup .btn-primary {margin-top: 20px;}</style>
</head>
<body><div class="container mt-5"><h2 class="text-center mb-4">用户注册</h2><form method="post" class="form-signup">{% csrf_token %}{{ form.as_p }}<button type="submit" class="btn btn-primary btn-block">注册</button></form>
</div><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<!-- 引入 Bootstrap JavaScript -->
</body>
</html>

其中 {{ form.as_p }} 代表了引用了Django的form表单,并以p标签的形式显示。同时页面使用bootstrap框架进行了稍微了美化

3.3创建视图注册处理函数

在视图中处理用户提交的注册表单。

def signup(request):if request.method == 'POST':form = SignUpForm(request.POST)if form.is_valid():form.save()return redirect('/login')  # 注册成功后重定向到登录页面或其他页面print(form.errors)        # 打印错误信息else:form = SignUpForm()return render(request, 'signup.html', {'form': form})

如果使用了Django的form组件,可以直接获取form表单,并对字段进行校验,创建新用户并保存到数据库中。如果校验不通过,将继续返回注册页面重新注册

3.4配置 URL

from django.contrib import admin
from django.urls import path
from . import reader_controller
urlpatterns = [path('admin/', admin.site.urls),path('login/', reader_controller.reader_login, name='reader_login'),path('signup/', reader_controller.signup, name='reader_signup'),
]

4.效果演示

4.1注册

在浏览器输入http://127.0.0.1:8000/signup/
在这里插入图片描述
注册成功之后,将跳转到登录页面。查看数据库进行验证,可以发现,django 自动帮我们进行了密码加密,并且添加了其他的字段,非常的方便
在这里插入图片描述

4.2登录

当注册成功后自动跳转到登录页面,也可以在浏览器直接通过地址访问
在这里插入图片描述
当数据库数据匹配成功后,将会跳转到登录成功页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/234853.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的网络编程

文章目录 网络基础知识IP 地址端口协议 Java 中网络编程InetAddress&#xff08;静态类&#xff09;UDP 通信原理UDP 发送数据步骤UDP 接收数据步骤UDP 发送接收案例 TCP 通信原理TCP 发送数据步骤TCP 接收数据步骤TCP 发送接收案例 网络基础知识 概述&#xff1a;在网络通信协…

限流式保护器在户外汽车充装的应用

摘 要&#xff1a;国家标准GB51348-2019中规定储备仓库、电动车充电等场所的末端回路应设置限流式电气防火保护器。电气防火限流式保护器可以有效克服传统断路器、空气开关和监控设备存在的短路电流大、切断短路电流时间长、短路时产生的电弧火花大&#xff0c;以及使用寿命短等…

鱼哥赠书活动第⑥期:《内网渗透实战攻略》看完这本书教你玩转内网渗透测试成为实战高手!!!!

鱼哥赠书活动第⑥期&#xff1a;《内网渗透实战攻略》 如何阅读本书&#xff1a;本书章节介绍&#xff1a;本书大致目录&#xff1a;适合阅读对象&#xff1a;赠书抽奖规则:往期赠书福利&#xff1a; 当今&#xff0c;网络系统面临着越来越严峻的安全挑战。在众多的安全挑战中&…

14:00面试,14:07就出来了,问的问题有点变态。。。

前言 刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资还…

EndNote20 下载与安装详细教程

扫描文末二维码&#xff0c;关注微信公众号&#xff1a;ThsPool 后台回复 a004 &#xff0c;免费领取 EndNote20下载安装包 EndNote是一款备受欢迎的文献管理软件&#xff0c;被数百万研究人员、学生和图书管理员广泛使用。它提供便捷的方式来扩展各种语言的参考书目&#xff0…

并发程序设计--D11D12进程间通信

概念&#xff1a;就是进程和进程之间交换信息。 常用通信方式 无名管道&#xff08;pipe&#xff09; 有名管道 &#xff08;fifo&#xff09; 信号&#xff08;signal&#xff09; 共享内存映射(mmap) 套接字&#xff08;socket&#xff09; 过时的IPC通信方式 System…

ChatGPT扩展系列之网易数帆ChatBI

在当今数字化快速发展的时代,数据已经成为业务经营与管理决策的核心驱要素。无论是跨国大企业还是新兴创业公司,正确、迅速地洞察数据已经变得至关重要。然而,传统的BI工具往往对用户有一定的技术门槛,需要熟练的操作技能和复杂的查询语句,这使得大部分的企业员工难以深入…

【Flutter 开发实战】Dart 基础篇:从了解背景开始

想要学会用 Flutter 开发 App&#xff0c;就不可避免的要学习另一门很有意思的编程语言 —— Dart。很多小伙伴可能在学习 Flutter 之前可能都没听说过这门编程语言&#xff0c;我也是一样&#xff0c;还以为 Dart 是为了 Flutter 而诞生的&#xff1b;然而&#xff0c;当我们去…

计算机网络(2)

计算机网络&#xff08;2&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网&#xff08;2&#xff09;分组交换网中的时延、丢包和吞吐量时延丢包吞吐量总结 协议层次及其服务模型模型类型OSI模型分析TCP/IP模型分析 追溯历史 小程一言 我…

2024年 快速搭建自己AI Gemini API 搭建完整

先看下效果 体验效果 Gemini 前言 12月7日消息&#xff0c;谷歌12月6日宣布推出其认为规模最大、功能最强大的人工智能模型Gemini。Gemini将包括三种不同的套件&#xff1a;Gemini Ultra&#xff0c;Gemini Pro和Gemini Nano。 谷歌表示&#xff0c;该公司备受期待的人工智能…

YB2412L 18V 2A 500KHz 同步降压稳压器

YB2412L 18V 2A 500KHz 同步降压稳压器 概述&#xff1a; YB2412L是一种高频、同步、整流、降压、开关模式转换器 移动组。它提供了一个非常紧凑的解决方案&#xff0c;以实现一个2A连续输出电流在一个广泛的输入供应 范围&#xff0c;具有良好的负荷和线路调节。 YB2412L需…

【FPGA/verilog -入门学习17】vivado 实现串口自发自收程序

1&#xff0c;需求 PC使用串口助手给FPGA板发送9600 波特率的数据&#xff0c;FPGA板接收到数据后&#xff0c;回复同样的数据给PC 2&#xff0c;需求分析 按模块可以划分为&#xff1a; rx接收模块&#xff0c;将输入的8位并行rx 数据转换成[7:0]rx_data 信号&#xff0c;当…

设计模式之外观模式【结构型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

小游戏实战丨基于Tkinter的五子棋小游戏

文章目录 写在前面Tkinter五子棋系列文章写在后面 写在前面 本期内容&#xff1a;基于tkinter的五子棋小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700190 实验环境 python3.11及以上pycharmtkinter Tkinter Tkinter是Python的一个标准…

C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化

归并排序 归并算法采用非常经典的分治策略&#xff0c;每次把序列分成n/2的长度&#xff0c;将问题分解成小问题&#xff0c;由复杂变简单。 因为使用了递归算法&#xff0c;不能用于大数据的排序。 核心代码&#xff1a; using System; using System.Text; using System.Co…

phpstudy面板Table ‘mysql.proc‘ doesn‘t exist解决办法

原因分析&#xff1a;误删了mysql数据库 解决办法如下&#xff1a; 1、停止服务 2、先把mysql文件夹下的data文件夹备份&#xff0c;因为data文件里存有数据库文件。然后再删除data文件。 3、cmd管理员命令进入到mysql中的bin目录下 &#xff0c;执行mysqld --initialize-…

视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?

智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联…

Linux Debian12系统gnome桌面环境默认提供截屏截图工具gnome-screenshot

一、简介&#xff1a; 在Debian12中系统gnome桌面环境默认提供一个截图捕获工具screenshot,可以自定义区域截图、屏幕截图、窗口截图和录制视频&#xff0c;截图默认保存在“~/图片/截图”路径下。 可以在应用程序中搜索screenshot,如下图&#xff1a; 也可以在桌面右上角找到…

【揭秘APT攻击】——内网渗透实战攻略,带你领略网络安全的绝密世界!

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 介绍 什么是内网&#xff1f; 什么是内网渗透&#xff1f; 内网渗透的目的&#xff1a; 内网…

数据挖掘在制造业中的预测与优化应用

随着大数据时代的到来&#xff0c;数据挖掘技术在各行各业的应用日益广泛&#xff0c;尤其在制造业中&#xff0c;其对于提升生产效率、降低运营成本、优化供应链管理等方面发挥着不可替代的作用。本文将探讨数据挖掘在制造业中的预测与优化应用&#xff0c;通过深入剖析实际案…