目录

  • 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模型、模板、表单简单应用)相关推荐

  1. HTML MySQL实现登录注册_servlet+html+mysql实现登录注册功能

    这是结构图 jdbc连接数据库 package jdbc; import java.sql.DriverManager; import java.sql.SQLException; import ja ...

  2. vue+node+mysql实现登录注册功能

    1.创建目录 2.安装需要用到的axios,mysql, express, body-parser npm install axios mysql express body-parser --save ...

  3. PHP交互MySQL 实现登录注册功能

    目录 一,基础知识 建立.关闭与MySQL服务器的连接 1)连接指定的mysql服务器 2)连接错误时的提示 3)设置默认字符编码 4)选择特定的数据库 mysqli_select_db ( $lin ...

  4. unity 使用mysql实现登录注册_用mysql实现登录注册功能

    1.创建用户表 表结构如下 id uname upwd isdelete 注意:需要对密码进行加密. 如果使用md5加密,则密码包含32个字符. 如果使用sha1加密,则密码包含40个字符,这里使用这 ...

  5. 基于jwt的登录/注册功能实现

    # views.py # 登录视图 class LoginView(ViewSet):# 登录@action(methods=['POST'], detail=False)def login(self ...

  6. 表单实现登录注册功能

    为了开发出一个家教信息服务网站,家教注册登录,家教信息发布这些都需要通过表单还实现. 系列文章汇总: 一.整体设计:家教信息服务平台的开发 二.前端设计:表单实现登录注册功能 三.后台设计:MySQL ...

  7. 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息

    使用JSP实现简单的登录注册功能,并且使用了Session来跟踪用户的登录信息,这个是用纯JSP来实现此功能的,由于没有连接数据库,所以使用List来模拟数据库. 第一步:创建web项目 如果有不会创 ...

  8. php注册登录描述,基于PHP实现用户登录注册功能的详细教程

    教程前先给大家看看小编的实现成果吧! 图1: 图2: 图3: 教程: 实现这个功能我们需要五个php文件: login.php (登录界面,如图2) 登录 登录页面 用户名: required=&qu ...

  9. Django(二)精美博客搭建(1)实现登录/注册功能

    前言 之前我们用Django框架做了一个很简单的个人博客搭建,不论是页面还是功能都很粗糙 所以从这篇开始我打算做一个比较完整的[个人博客网站],可能会分好几篇博客来讲述 等所有功能完善的差不多后,再考 ...

最新文章

  1. SQL SERVER出现大量一致性错误的解决方法
  2. 【Python】Python学习----第一模块笔记
  3. 树莓派教程之树莓派系统镜像刷入和远程登陆(1)
  4. matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法
  5. Kafka日志清理之Log Deletion
  6. git push 的符号笔有什么用_Git 标签(tag)作用、分支区别及常用命令
  7. 刷题bingo挑战赛1
  8. 信息学奥赛一本通(1114:白细胞计数)
  9. SpringMVC连接MongoDB操作数据库
  10. Windows下Apache架站务实
  11. 将TensorFlow训练的模型移植到Android手机
  12. visio连接线文字背景填充_visio教程:如何调整连接线上文字的位置?
  13. Leetcode各种题型题目+思路+代码(共176道题及答案)
  14. python父亲节礼物_盘点父亲节礼物,爸爸们的礼物也要用心挑选~
  15. 【英语六级】【仔细阅读】(4)
  16. revo加密_使用Revo Uninstaller完全卸载程序以及更多其他功能
  17. 地铁怎么坐才不能做反_坐地铁怎样才不会坐反方向
  18. Java EE 7 Hands-on Lab,CDI deployment failure:WELD-000072,解决办法
  19. SpringMVC接受参数
  20. latex小技巧—极限符号下方分成两行

热门文章

  1. 华为eNSP 配置DHCP自动分配IP地址
  2. OSPF NBMA网络
  3. 批量创建10个文件夹,只需1秒~
  4. 安装java8和tomcat_jdk1.8.0+tomcat8.0安装
  5. Fiducial marker (Aruco)
  6. IIS MIME设置
  7. 抖音生活小妙招类短视频创作技巧分享,几个方面带你了解整个流程
  8. bash快捷键Quick bash shortcuts--用Enki学Linux系列(4)
  9. 哥伦比亚大学 自然语言处理 公开课 授课讲稿 翻译(四)
  10. 一张图了解大数据平台架构