Python3.7 + Django3.2 + MySQL8.0
文章目录
一、创建一个web服务器
django-admin startproject pyweb
pyweb 文件下包含一个同名文件夹和manage.py
manage.py可以理解是网站的管理脚本,同名文件夹功能可以理解为对网站内容的控制
二、创建app(web应用程序)
python manage.py startapp web
1.启动网站试试
python manage.py runserver
提示了‘错误’,但是依然可以访问网页,可以不用管,我们用的并不是它默认提供的数据库
2.注册app
在pyweb\pyweb\settings.py中注册app,添加’web.apps.WebConfig’的字段:
# Application definition
#应用定义
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#注册app,连接的是web/apps.py 文件中的WebConfig类(创建的名字不同,类名也不同)
'web.apps.WebConfig',
]
Django设计app的核心理念是功能的模块化和可重用。
3.建立表结构(mysql数据库)
首先要打开数据库,建立一个本次项目的数据库
create database dj;
配置数据库(修改pyweb\pyweb\settings.py配置信息):
注释掉原始数据库配置,删除数据文件pyweb\db.sqlite3,如果有的话
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
#mysql database
# 添加的内容
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dj',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'root'
}
}
保证这两个操作mysql 的模块已经安装
pip install mysqlclient
pip install pymysql
在\pyweb\web\models.py中建表:
文件中每个class相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 #CharField )相当于数据库的字段类型 (例如 varchar )。
from django.db import models
# Create your models here.
# 文件中每个class相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 #CharField )相当于数据库的字段类型 (例如 varchar )。
class Admin(models.Model):
"""Admin Info"""
# ID 字段可以自动生成
username = models.CharField(verbose_name='姓名', max_length=32)
password = models.CharField(verbose_name='密码', max_length=32)
生成数据表:
1、生成迁移文件(在终端执行如下命令)
python manage.py makemigrations
2、执行迁移文件(在终端执行如下命令)
python manage.py migrate
得到如下表,除了最后一个是我们自己创建的,其他表都是系统生成的:
在web_admin表中插入几条记录,登录页面的验证要用到username和password字段:
insert into web_admin(username,password) values ('giao','0000');
insert into web_admin(username,password) values ('jing','1111');
4.登录页面
先放出页面效果
关联页面要用到pyweb\pyweb\urls.py 和 pyweb\web\views.py 两个文件(假设我们已经有了login.html页面)。
1.先做网站目录链接到函数的部分url.py
from django.contrib import admin
from django.urls import path
# 必须先导入web/views
from web import views
urlpatterns = [
# path('admin/', admin.site.urls),
# 把网站地址和要执行函数建立对应关系
path('login/',views.login),
]
2.再把函数和login.html页面相关连
from django.shortcuts import render
#导入重定向redirect为了测试
from django.shortcuts import redirect
#导入models为了操作数据库
from web import models
# Create your views here.
def login(request):
return render(request,'login.html')
3.做一个login.html页面,我们要先建一个templates文件夹来放html文件(还有static文件夹来放有关html的文件,例如img,css,js等),就像这样,然后login.html新建在templates文件夹下即可。
简单构建一个页面,表单form中添加三个div,并增大间距代码让login.html结构更清晰
<!DOCTYPE html>
<html>
<head>
<title>Japan_is_shit</title>
</head>
<body>
<div>
<h2>用户登陆</h2>
<!-- 表单 -->
<form method="post">
<!-- django默认在post请求加一个csrf_token值,不加{% csrf_token %}会报错 -->
{% csrf_token %}
<div>
<label>用户名</label>
<div>
<input type="" name="user">
</div>
</div>
<div>
<label>密码</label>
<div>
<input type="" name="pwd">
</div>
</div>
<div>
<div>
<!-- 错误信息 -->
<span>{{error_msg}}</span>
<button>登录</button>
</div>
</div>
</form>
</div>
</body>
</html>
到这为止,访问http://127.0.0.1:8000/login/
就可以访问到login.html页面。
4.接下来在views.py的login函数中写登录的逻辑
from django.shortcuts import render,redirect
#导入models为了操作数据库
from web import models
# Create your views here.
# 用request方式
def login(request):
# 如果请求方式是get,就返回本页面,否则(post方式)就获取页面提交的内容
# 和数据库的用户名/密码做对比,相同就登录,不同就报错
if request.method == "GET":
return render(request, 'login.html')
# user对应html文件<input type="" name="user">输入框,pwd同理
name = request.POST.get('user')
pwd = request.POST.get('pwd')
# 从数据库web中的web_userinfo表中取出所有数据
data_list = models.Admin.objects.all()
# 从每条数据中取得name和password字段进行比较
for data in data_list:
if data.username == name and data.password == pwd:
# 登录成功跳转到我主页
return redirect('https://blog.csdn.net/qq_43504837')
# 登录不成功就返回本页面,并给出错误信息
return render(request, 'login.html', {"error_msg": "用户名或错误"})
让我们再看看数据库web_userinfo表中的数据,这时用他们的name和password就可以登录了(指跳转至我主页)
总结
登录页面的css,加入用户认证和图片验证码。
背景图片链接
孤勇者 双城之战 金克丝 厚涂 孤勇者4k壁纸—原图
孤勇者 双城之战 金克丝 厚涂 孤勇者4k壁纸—使用图