当前位置: 首页 > news >正文

django+mysql实现一个简单的web登录页面

目录

一、使用pyacharm创建一个django项目

二、启动django项目验证

三、配置mysql数据库

1、本地安装mysql数据库

1)安装mysql数据库

2)自己创建一个数据库

2、安装 pymysql

3、配置mysql数据库

1)在项目同名包下的_init_.py里面添加

 2)在settings.py文件中,把DATABASES中的内容换掉

4、django默认数据迁移

 1)执行迁移,将项目中原有的应用的模型同步迁移到数据库

 2)查看数据迁移结果

5、创建一个后台超级管理员 

 四、登录后台系统

1、启动服务

2、登录后台系统

五、创建app应用

1、命令创建应用

 2、在settings中的INSTALLED_APPS中配置应用

六、配置应用路由 

1、配置主路由

2、配置子应用路由

3、配置views

七、创建html页面

1、确定模版配置是否正确

 2、创建一个示例html页面 

 八、访问

九、优化实现简单的get与post

1、配置路由

2、使用get方式实现

1)配置views页面

2)优化登录页面

3)展示成果

3、使用post方式实现

1)配置views页面

2)优化登录页面

 3)展示成果

 十、继续优化,使用数据库方式进行数据判断

1、在model.py当中添加数据模型

2、将数据模型迁移到数据库

 3、创建数据进行后续操作

 4、修改views.py

5、验证

十一、实现注册

1、注册页面

2、配置路由

3、创建注册方法

 4、访问验证

十二、数据库表反映射到django的models


前言:本文从0到1实现django搭建一个web页面,实现了django连接mysql数据库,简单的get、post请求等

一、使用pyacharm创建一个django项目

略,专业版直接创建即可

这是初始化创建的第三方库

二、启动django项目验证

pycharm的terminal输入

python manage.py runserver

 访问:

 小插曲:在启动的时候报错:‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]
NameError: name ‘os’ is not defined

我的解决方法是:在settings.py文件头部  import os

网络上还有其他方法(博主没有去试):修改默认生成的“‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)]”,修改如下:
‘DIRS’: [Path(BASE_DIR, ‘templates’)]

三、配置mysql数据库

1、本地安装mysql数据库

1)安装mysql数据库

我使用的是5.7.22(我的版本),安装略

2)自己创建一个数据库

创建一个数据库名称:   smalldjangodb

2、安装 pymysql

pip install pymysql

3、配置mysql数据库

1)在项目同名包下的_init_.py里面添加

import pymysql
pymysql.install_as_MySQLdb()

 2)在settings.py文件中,把DATABASES中的内容换掉

 先注释掉默认的数据库配置下图部分

 将下面部分复制进去,然后进行修改

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',#数据库的类型
'NAME': '', #所使用的的数据库的名字
'USER': 'root', #数据库服务器的用户
'PASSWORD': '', #密码
'HOST': '127.0.0.1', #主机
'PORT': '3306', #端口
}
}

4、django默认数据迁移

 1)执行迁移,将项目中原有的应用的模型同步迁移到数据库

pycharm的terminal输入

python manage.py migrate

 2)查看数据迁移结果

5、创建一个后台超级管理员 

pycharm的terminal输入

python  manage.py createsuperuser

 用户名、邮箱(随便输,格式正确接口)、密码

这里注册的是super 密码qq+名字简写(给自己一个记录)

 四、登录后台系统

1、启动服务

python manage.py runserver

2、登录后台系统

使用上一步创建的超管账户登录系统 

http://127.0.0.1:8000/admin

 登录成功页面:

五、创建app应用

1、命令创建应用

pycharm的terminal输入

python  manage.py startapp lucky

 

 2、在settings中的INSTALLED_APPS中配置应用

将应用lucky加到配置settings中的INSTALLED_APPS

六、配置应用路由 

  

1、配置主路由

 在应用文件夹lucky下面创建一个子路由文件urls.py

 改成如下图:

 多个应用的话,配置多个主路由

2、配置子应用路由

 输入(这里views.toLoginView指的是lucky应用下views里面的方法toLoginView,下一步会说明):

from django.urls import path
from . import viewsurlpatterns = [path('', views.toLoginView, name='toLoginView'),
]

3、配置views

打开应用lucky目录下的views

from django.shortcuts import render# Create your views here.def toLoginView(request):return render(request, 'login.html')

七、创建html页面

1、确定模版配置是否正确

 2、创建一个示例html页面 

在templates下创建一个login.html

 八、访问

启动服务访问地址:http://127.0.0.1:8000/lucky/

开启:settings.py开启debug模式
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

九、优化实现简单的get与post

1、配置路由

from django.urls import path
from . import viewsurlpatterns = [path('', views.toLoginView),path('index/', views.loginView),
]

2、使用get方式实现

1)配置views页面

from django.http import HttpResponse
from django.shortcuts import render# Create your views here.def toLoginView(request):return render(request, 'login.html')def loginView(request):username = request.GET.get('user', '') # 后面的''表示获取不到user就赋值空password = request.GET.get('pwd', '')if username and password:return HttpResponse("登录成功")else:return HttpResponse("登录失败")

2)优化登录页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body><form action="/lucky/index/" method="get"><p><label>用户名:</label><input name="user" /></p><p><label>密码:</label><input name="pwd" /></p><input type="submit" value="登录"></form></body>
</html>

3)展示成果

启动服务 http://127.0.0.1:8000/lucky/

 登录成功

 get请求的缺点是账户密码暴露在URL,所有下面讲解post方式

3、使用post方式实现

1)配置views页面

from django.http import HttpResponse
from django.shortcuts import render# Create your views here.def toLoginView(request):return render(request, 'login.html')def loginView(request):username = request.POST.get('user', '') # 后面的''表示获取不到user就赋值空password = request.POST.get('pwd', '')# if username=='admin' and password=='1':if username and password:return HttpResponse("登录成功")else:return HttpResponse("登录失败")

2)优化登录页面

将上面的get修改为post即可

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body><form action="/lucky/index/" method="post"><p><label>用户名:</label><input name="user" /></p><p><label>密码:</label><input name="pwd" /></p><input type="submit" value="登录"></form></body>
</html>

 3)展示成果

启动服务 http://127.0.0.1:8000/lucky/

 十、继续优化,使用数据库方式进行数据判断

1、在model.py当中添加数据模型

from django.db import models# Create your models here.class UserInfo(models.Model):id = models.CharField(primary_key=True,max_length=20)name = models.CharField(max_length=20)password = models.CharField(max_length=20)

2、将数据模型迁移到数据库

注意mysql此时要能支持访问

python manage.py makemigrations lucky

 将数据迁移到mysql数据库

python manage.py migrate

 到数据库验证:

 3、创建数据进行后续操作

 4、修改views.py

from django.http import HttpResponse
from django.shortcuts import render
from .models import *# Create your views here.def toLoginView(request):return render(request, 'login.html')def loginView(request):user_name = request.POST.get('user', '') # 后面的''表示获取不到user就赋值空pass_word = request.POST.get('pwd', '')# if user_name=='admin' and pass_word=='1':if user_name and pass_word:exit_user =UserInfo.objects.filter(name= user_name,password = pass_word).count()if exit_user >= 1:return HttpResponse("登录成功!")else:return HttpResponse("帐号密码错误!")else:return HttpResponse("请输入正确用户名和密码!")

5、验证

 

十一、实现注册

1、注册页面

在templates下创建register.html 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册</title>
</head>
<body><form action="/lucky/register/" method="post">{% csrf_token %}<p><label>用户名:</label><input name="user" /></p><p><label>密码:</label><input name="pwd" /></p><input type="submit" value="注册"></form></body>
</html>

2、配置路由

from django.urls import path
from . import viewsurlpatterns = [path('', views.toLoginView),path('index/', views.loginView),path('toregister/', views.toRegisterView),path('register/', views.registerView),
]

3、创建注册方法

到views.py文件当中创建registerView方法和toRegisterView方法

from django.http import HttpResponse
from django.shortcuts import render
from .models import *# Create your views here.def toLoginView(request):return render(request, 'login.html')def loginView(request):user_name = request.POST.get('user', '') # 后面的''表示获取不到user就赋值空pass_word = request.POST.get('pwd', '')# if user_name=='admin' and pass_word=='1':if user_name and pass_word:exit_user = UserInfo.objects.filter(name=user_name, password=pass_word).count()if exit_user >= 1:return HttpResponse("登录成功!")else:return HttpResponse("帐号密码错误!")else:return HttpResponse("请输入正确用户名和密码!")# 渲染注册页面
def toRegisterView(request):return render(request, 'register.html')# 注册的逻辑判断
def registerView(request):user_name = request.POST.get('user', '')pass_word = request.POST.get('pwd', '')if user_name and pass_word:register_user = UserInfo(name=user_name, password=pass_word)register_user.save()return HttpResponse("注册成功!")else:return HttpResponse("请输入完整的用户名和密码!")

 4、访问验证

注意访问路径要加应用名字,这个路由配置有关

访问 http://127.0.0.1:8000/lucky/toregister/

 注册成功

 数据库验证

这个是注册加了一个重复的判断

# 注册的逻辑判断
def registerView(request):user_name = request.POST.get('user', '')pass_word = request.POST.get('pwd', '')if user_name and pass_word:exit_user = UserInfo.objects.filter(name=user_name).count()        if exit_user:return HttpResponse("对不起,当前账户已存在!请换一个id注册")else:register_user = UserInfo(name=user_name, password=pass_word)register_user.save()return HttpResponse("注册成功!")else:return HttpResponse("请输入完整的用户名和密码!")

十二、数据库表反映射到django的models

这个会将数据库当中的全部表都映射过来

# lucky 是django的应用名
python manage.py inspectdb>lucky/models.py

相关文章:

django+mysql实现一个简单的web登录页面

目录 一、使用pyacharm创建一个django项目 二、启动django项目验证 三、配置mysql数据库 1、本地安装mysql数据库 1&#xff09;安装mysql数据库 2&#xff09;自己创建一个数据库 2、安装 pymysql 3、配置mysql数据库 1&#xff09;在项目同名包下的_init_.py里面添加…...

python cartopy手动导入地图数据绘制底图/python地图上绘制散点图:Downloading:warnings/散点图添加图里标签

……开学回所&#xff0c;打开电脑spyder一看一脸懵逼&#xff0c;简直不敢相信这些都是我自己用过的代码&#xff0c;想把以前的自己喊过来科研了&#xff08;&#xff09; 废话少说&#xff0c;最近写小综述论文&#xff0c;需要绘制一个地图底图&#xff0b;散点图&#xff…...

JavaScript中常用的数组方法

在日常开发中&#xff0c;我们会接触到js中数组的一些方法&#xff0c;这些方法对我们来说&#xff0c;可以很便利的达到我们想要的结果&#xff0c;但是因为方法比较多&#xff0c;有些方法也不常用&#xff0c;可能会过一段时间就会忘记&#xff0c;那么在这里我整理了一些数…...

磁疗为什么“没效果”?原来真相是这样!

很多人磁疗之后&#xff0c; 总爱迫不及待问一个问题&#xff1a; “这个多长时间见效啊&#xff1f;” …… 还有些人几天没有效果&#xff0c; 就果断下结论&#xff1a; “这东西没用&#xff01;” …… 有不少人错误地把磁疗等同于“药品”一样看待&#xff0c;总觉得…...

【直击招聘C++】5.1函数模板

5.1函数模板一、要点归纳1.定义函数模板2.实例化函数模板3.重载模板函数4.函数调用的匹配顺序一、要点归纳 1.定义函数模板 定义函数模板的一般格式如下&#xff1a; template<类型形参表> 返回类型 函数名&#xff08;形参表&#xff09; {函数体&#xff1b; }例如以…...

谈谈Java多线程离不开的AQS

如果你想深入研究Java并发的话&#xff0c;那么AQS一定是绕不开的一块知识点&#xff0c;Java并发包很多的同步工具类底层都是基于AQS来实现的&#xff0c;比如我们工作中经常用的Lock工具ReentrantLock、栅栏CountDownLatch、信号量Semaphore等&#xff0c;而且关于AQS的知识点…...

国际化语言,多语言三种方式

可以用透传的方式&#xff0c;自己写local的json文件&#xff0c;不需要配置什么&#xff0c;直接传&#xff0c;自己写方法i18n nextjsi18n umi4一、透传的方式 export const AppContext React.createContext<any>({})app.tsx 用context包裹import type { AppProps } f…...

C++——哈希3|位图

目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址&#xff1a;Hash&#xff08;Key&#xff09; A*Key B 优点&#xff1a;简单、均匀 缺点&#xff1a;需要事先知道关键字的…...

75 error

全部 答对 答错 选择题 3. 某公司非常倚重预测型方法交付项目&#xff0c;而其招聘的新项目经理却习惯于运用混合型方法。项目范围包含很多不清晰的需求。项目经理应该如何规划项目的交付&#xff1f; A company that is heavily focused on delivering projects using predi…...

ESP-C3入门8. 连接WiFi并打印信息

ESP-C3入门8. 连接WiFi并打印信息一、ESP32 连接WiFi的基本操作流程1. 初始化nvs存储2. 配置WiFi工作模式3. 设置WiFi登陆信息4. 启动WiFi5. 开启连接6. 判断是否成功二、事件处理函数1. 定义事件处理函数2. 创建事件组3. 在事件处理函数中设置事件组位4. 在其他任务中等待事件…...

使用python将EXCEL表格中数据转存到数据库

使用Python将excel表格中数据转存到数据库 1. 思路&#xff1a; 1&#xff09; 使用python读取excel表格中数据 2&#xff09;根据数据生成sql语句 3&#xff09;批量运行sql语句 2. 代码&#xff1a; import pandas as pddef readExcel(path, excel_file):return pd.read_e…...

【C++】类和对象(三)

目录 一、构造函数补充 1、初始化列表 1.1、初始化列表概念 1.2、初始化列表性质 2、explicit关键字 二、static成员 1、概念及使用 2、性质总结 三、友元 1、友元函数 2、友元类 四、内部类 五、拷贝对象时的一些编译器优化 一、构造函数补充 在《类和对象&#x…...

vTESTstudio - VT System CAPL Functions - General/Trigger Function

前面文章中我们已经介绍了常用的几种板卡的基本信息&#xff0c;那这些板卡该如何去通过软件调用呢&#xff1f;带着这个问题我们开始新的一块内容 - VT系统相关的自动化控制函数介绍&#xff0c;我会按照不同的板卡来分类&#xff0c;对其可控制的函数进行介绍&#xff0c;方便…...

IDEA 快捷键

ctrlD &#xff1a;复制当前行到下一行 ctrlO : 重写当前类的方法 ctrlshiftu : 大小写转化 Alt 上/下 &#xff1a;跳到上一个、下一个函数 Alt 左/右 : 回到上一个、下一个文件 Alt 回车 &#xff1a; 代码修正 Alt Insert &#xff1a; 插入代码 Ctrl Alt L &#xf…...

2023新华为OD机试题 - 入栈出栈(JavaScript) | 刷完必过

入栈出栈 题目 向一个空栈中依次存入正整数 假设入栈元素N(1 <= N <= 2^31-1) 按顺序依次为Nx ... N4、N3、N2、N1, 当元素入栈时,如果N1=N2+...Ny (y的范围[2,x],1 <= x <= 1000) 则N1到Ny全部元素出栈,重新入栈新元素M(M=2*N1) 如依次向栈存储6、1、2、3,当存…...

微信公众号扫码授权登录思路

引言 上学期研究了一下微信登录相关内容&#xff0c;也写了两三篇笔记&#xff0c;但是最后实际登录流程没有写&#xff0c;主要因为感觉功能完成有所欠缺&#xff0c;一直也没有好的思路&#xff1b;这两天我又看了看官方文档&#xff0c;重新构思了一下微信公众号登录相关的…...

数据结构与算法基础-学习-10-线性表之顺序栈的清理、销毁、压栈、弹栈

一、函数实现顺序栈的其他函数实现&#xff0c;请看之前的博客链接《数据结构与算法基础-学习-09-线性表之栈的理解、初始化顺序栈、判断顺序栈空、获取顺序栈长度的实现》。1、ClearSqStack&#xff08;1&#xff09;用途清理栈的空间。只需要栈顶指针和栈底指针相等&#xff…...

Hazel游戏引擎(005)

本人菜鸟&#xff0c;文中若有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/GameEngineLightWeight&#xff08;中文的注释适合中国人的你&#xff09; 文章目录前言关键操作代码文件关键代码代码流程代码文件关键代码exter…...

牛客网Python篇数据分析习题(四)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…...

盲盒如何创业?

所谓的“盲盒”&#xff0c;受众群体大部分是那些爱碰运气的人&#xff0c;顾客买的是那种在打开盲盒时一刹那的惊喜感和神秘感&#xff0c;在打开盲盒之前&#xff0c;谁也不知道自己会得到什么&#xff0c;这也是为什么消费者更愿意购买的原因。网上的盲盒&#xff0c;主要是…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...