Django练习——基于Mysql的登录注册功能界面(django模型、模板、表单简单应用)
目录
- 1.创建
- 2.配置Mysql
- (1)连接数据库驱动
- (2)创建表格
- (3)创建迁移文件并同步到数据库
- 3.admin后台
- (1)创建超级用户
- (2)注册模型login_msg
- 4.路由与视图
- 4.1先搭框架
- 4.2编写视图处理函数
- 5.运行结果
练习完成一个有登录注册功能的Django项目,本文记录练习过程、相关知识点。
1.创建
新建项目:Django_login,新建app:mine_login,并注册app
创建详见Djongo学习笔记——pycharm创建Django服务、app及相关知识点
2.配置Mysql
(1)连接数据库驱动
找到settings.py中的DATABASES如下:
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}
ENGINE表示要连接的数据库驱动:
django.db.backends.sqlite3 连接 sqlite3
django.db.backends.postgresql 连接 PostgreSQL
django.db.backends.mysql 连接 mysql
django.db.backends.sqlite3 连接 sqlite
django.db.backends.oracle 连接 oracle
修改如下:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', #数据库连接'NAME': 'user_msg',#数据库名称'USER': 'root', #登录账号'PASSWORD': '123456', #登录密码'HOST': '127.0.0.1', #服务器地址'PORT': '3306', #端口}
}
(2)创建表格
本练习创建用户信息表,包括用户名,登录密码。在app下的models.py输入以下代码:
from django.db import modelsclass login_msg(models.Model):user = models.CharField(max_length=30) #用户名userpw = models.CharField(max_length=128) #用户密码
如果没有定义主键没关系,会在生成时自动添加,并且值为自动增加。
注意:红框中该句记得注释,不然会弹出登录弹窗(没研究是什么弹窗,类似远程连接)
(3)创建迁移文件并同步到数据库
python manage.py makemigrations
python manage.py migrate
(base) D:\YYL\Mine\Study\Django_login>python manage.py makemigrations
Migrations for 'mine_login':mine_login\migrations\0001_initial.py- Create model login_msg(base) D:\YYL\Mine\Study\Django_login>python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, contenttypes, mine_login, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying auth.0012_auto_20210322_1012... OKApplying mine_login.0001_initial... OKApplying sessions.0001_initial... OK
查看数据库,表已创建:
3.admin后台
(1)创建超级用户
命令python manage.py createsuperuser
(base) D:\YYL\Mine\Study\Django_login>python manage.py createsuperuser
Username (leave blank to use '18323'): admin
Email address: admin@qq.com
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is too common.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
(2)注册模型login_msg
在admin.py中:
#mine_login\admin.py
from django.contrib import admin
from .models import login_msg# Register your models here.
admin.site.register(login_msg)
启动服务器后进入admin页面可见:
4.路由与视图
本次练习的架构仅设置三个页面:登录页面(login)、注册页面(register)、登陆成功(index)。
登录界面内:若数据库查无此用户名,则提示该用户未注册;若用户名与密码不匹配则提示用户名或密码错误;点击注册则跳转至注册界面;若登录成功则跳转至“登录成功”界面。
注册界面内:若已存在用户名,则提示该用户已注册;若查无相关数据则提示注册成功,并将注册用户名及用户密码存入数据库。
4.1先搭框架
(1)login,register,index模板
在根目录templates文件(若没有该文件夹,则在项目根目录下创建该文件夹)下创建login.html,register.html,index.html文件,这里是博主的糊弄版界面:
login.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>login</title>
</head>
<body>
<form action="/login/" method="post">{% csrf_token %}<p><p>用户名:<input type="text" name="user"></p><p>密码:<input type="password" name="userpw"></p><p><input type="submit" value="登录" name="sub"><input type="submit" value="注册" name="reg1"></p></p>
</form><p>{{ rlt }}</p>
</body>
</html>
register.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>register</title>
</head>
<body>
<form action="/register/" method="post">{% csrf_token %}<p><p>用户名:<input type="text" name="user"></p><p>密码:<input type="text" name="userpw"></p><p><input type="submit" value="注册" name="reg2"><input type="submit" value="返回" name="back"></p></p>
</form><p>{{ rlt }}</p>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login successfully</title>
</head>
<body>
<form>登录成功
</form>
</body>
</html>
此处应注意:
1.提交数据时更常用POST方法(POST与GET区别参见https://blog.csdn.net/weixin_44251129/article/details/89522484)
2.模板的末尾,rlt 记号是为表格处理结果预留位置(登录成功or失败、注册成功or注册失败)
3.{% csrf_token %}标签:csrf 全称是 Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST方法提交的表格,必须有此标签,不然会报错,与setting文件的中间件’django.middleware.csrf.CsrfViewMiddleware’对应。
因此,注释掉该中间件就可以避免报错,django自带CSRF防护机制,也可以选择加个@csrf_exempt(from django.views.decorators.csrf import csrf_exempt)屏蔽装饰器。
(2)视图与路由绑定
首先搭建视图框架:在mine_login\views.py添加代码如下:
# from django.shortcuts import render
from django.shortcuts import render,redirect
# Create your views here.
def login(request):'''登录:param request::return:'''return render(request,'login.html')
def register(request):'''注册:param request::return:'''return render(request,'register.html')
然后在urls.py绑定视图:
from django.contrib import admin
from django.urls import path
import mine_login.views as minelogin_viewsurlpatterns = [path('admin/', admin.site.urls),path('login/', minelogin_views.login),path('register/', minelogin_views.register),
]
题外话:若Django框架下前后端分离,在urls.py配置接口,视图返回使用JsonResponse即可。
效果如下:
知识点:
- render(request,template_name,…)
必选参数:
request:请求对象
template_name: templates 中定义的文件, 要注意路径名. 如’templates\index.html’, 参数就要写‘index.html’
可选参数:
context:要添加到模板上下文的值的字典。 默认情况下,这是一个空的字典。 如果字典中的值是可调用的,则视图将在渲染模板之前调用它。
content_type:生成的文档要使用的MIME 类型。默认为DEFAULT_CONTENT_TYPE 设置的值。
status:响应的状态代码默认为“200”。
using:用于加载模板的模板引擎的 :setting:NAME
。
4.2编写视图处理函数
在views.py文件中增加逻辑处理函数:
def login(request):'''登录:param request::return:'''if request.method == 'POST':res = {}if 'sub' in request.POST: #处理表单中的登录username = request.POST['user']userpwd = request.POST['userpw']tmp = login_msg.objects.filter(user=username).exists()if tmp: #若表中存在该用户名数据,则已注册is_reg = login_msg.objects.filter(user=username,userpw=userpwd).exists()if is_reg: #若查询有结果return render(request,'index.html')else: #若查询无结果,则用户名或密码错误res['rlt'] = '用户名或密码错误'return render(request, 'login.html', res)else:#若表中无该用户名数据,则未注册res['rlt'] = '该用户名未注册,请注册后登录'return render(request,'login.html',res)elif 'reg1' in request.POST: #处理表单中的注册,界面跳转return render(request,'register.html')else:passreturn render(request,'login.html')
def register(request):'''注册:param request::return:'''if request.method == 'POST':res = {}if 'reg2' in request.POST: #处理表单中的注册username = request.POST['user']userpwd = request.POST['userpw']tmp = login_msg.objects.filter(user=username).exists()if tmp: #若存在该用户名相关数据,则用户已注册res['rlt'] = '该用户名已注册'return render(request,'register.html',res)else: #用户未注册,则向数据库中插入数据login_msg.objects.create(user=username,userpw=userpwd)res['rlt'] = '注册成功'return render(request,'register.html',res)elif 'back' in request.POST: #处理返回,界面跳转return render(request,'login.html')else:passreturn render(request,'register.html')
注意:
此处对于表单的处理,可以在app目录下创建forms.py文件,用于单独创建自定义表单。
此处对于一个表单内多个提交,可以使用提交按钮的name进行区分。
5.运行结果
启动服务器,此时数据表login_msg为空,
(1)登录时,若数据库查无此用户名,则提示该用户未注册
(2)点击注册进入注册界面,注册时,若该用户名查询无结果,则注册成功
此时进入admin页面可查看(或直接在数据库中查看)到数据已添加
(3)注册时,若该用户名已存在,则提示用户已注册
再次注册Tom
(4)登录时,密码与用户名不符
(5)用户名与密码相符,登录成功后跳转页面
青古の每篇一歌
《故里逢春》
我听着笙笛曲 人间清欢可期
落落冰川流转着千年古忆
Django练习——基于Mysql的登录注册功能界面(django模型、模板、表单简单应用)相关推荐
- HTML MySQL实现登录注册_servlet+html+mysql实现登录注册功能
这是结构图 jdbc连接数据库 package jdbc; import java.sql.DriverManager; import java.sql.SQLException; import ja ...
- vue+node+mysql实现登录注册功能
1.创建目录 2.安装需要用到的axios,mysql, express, body-parser npm install axios mysql express body-parser --save ...
- PHP交互MySQL 实现登录注册功能
目录 一,基础知识 建立.关闭与MySQL服务器的连接 1)连接指定的mysql服务器 2)连接错误时的提示 3)设置默认字符编码 4)选择特定的数据库 mysqli_select_db ( $lin ...
- unity 使用mysql实现登录注册_用mysql实现登录注册功能
1.创建用户表 表结构如下 id uname upwd isdelete 注意:需要对密码进行加密. 如果使用md5加密,则密码包含32个字符. 如果使用sha1加密,则密码包含40个字符,这里使用这 ...
- 基于jwt的登录/注册功能实现
# views.py # 登录视图 class LoginView(ViewSet):# 登录@action(methods=['POST'], detail=False)def login(self ...
- 表单实现登录注册功能
为了开发出一个家教信息服务网站,家教注册登录,家教信息发布这些都需要通过表单还实现. 系列文章汇总: 一.整体设计:家教信息服务平台的开发 二.前端设计:表单实现登录注册功能 三.后台设计:MySQL ...
- 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息
使用JSP实现简单的登录注册功能,并且使用了Session来跟踪用户的登录信息,这个是用纯JSP来实现此功能的,由于没有连接数据库,所以使用List来模拟数据库. 第一步:创建web项目 如果有不会创 ...
- php注册登录描述,基于PHP实现用户登录注册功能的详细教程
教程前先给大家看看小编的实现成果吧! 图1: 图2: 图3: 教程: 实现这个功能我们需要五个php文件: login.php (登录界面,如图2) 登录 登录页面 用户名: required=&qu ...
- Django(二)精美博客搭建(1)实现登录/注册功能
前言 之前我们用Django框架做了一个很简单的个人博客搭建,不论是页面还是功能都很粗糙 所以从这篇开始我打算做一个比较完整的[个人博客网站],可能会分好几篇博客来讲述 等所有功能完善的差不多后,再考 ...
最新文章
- SQL SERVER出现大量一致性错误的解决方法
- 【Python】Python学习----第一模块笔记
- 树莓派教程之树莓派系统镜像刷入和远程登陆(1)
- matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法
- Kafka日志清理之Log Deletion
- git push 的符号笔有什么用_Git 标签(tag)作用、分支区别及常用命令
- 刷题bingo挑战赛1
- 信息学奥赛一本通(1114:白细胞计数)
- SpringMVC连接MongoDB操作数据库
- Windows下Apache架站务实
- 将TensorFlow训练的模型移植到Android手机
- visio连接线文字背景填充_visio教程:如何调整连接线上文字的位置?
- Leetcode各种题型题目+思路+代码(共176道题及答案)
- python父亲节礼物_盘点父亲节礼物,爸爸们的礼物也要用心挑选~
- 【英语六级】【仔细阅读】(4)
- revo加密_使用Revo Uninstaller完全卸载程序以及更多其他功能
- 地铁怎么坐才不能做反_坐地铁怎样才不会坐反方向
- Java EE 7 Hands-on Lab,CDI deployment failure:WELD-000072,解决办法
- SpringMVC接受参数
- latex小技巧—极限符号下方分成两行