当前位置: 首页 > 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;主要是…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...