Django框架
安装django
- 终端执行并安装django
1
pip install django
1
2
3
4
5
6
7
8
9
10
11
12
13c:\python3.9
-python.exe
-bin
-script
-pip.exe
-django-admin.exe (工具,帮助创建django项目)
-lib
-内置模块
-site-packages
- openpyxl
- flask
- django (框架的源码)
创建项目
- 打开pycharm进入创建django文件
- 出现类似目录即为创建成功(不同版本略有不同)
还有一种命令行创建的,命令行创建的是最标准的,不会有templates目录,pycharm会自动帮助我们创建templates目录
我们学习的时候使用的最标准的templates目录
- 删除templates目录
- pycharm还在settings.py中自动生成了一句话
- 修改成如下(直接删除)
打开终端
- 默认已经进入我们的文件
- 输入命令即可完成创建
1
python manage.py startapp app01
djangoProject默认文件介绍
1 | djangoProject |
- app的项目目录
1 | - 项目 |
- app01文件目录
1 | - app01 |
创建项目并注册
安装django,在pycharm中创建项目文件夹,终端输入
python manage.py startapp app01
完成创建在settings.py中注册app,INSTALLED_APPS中的名字与app.py相对应
页面创建
编写url和视图函数的对应关系,urls.py中写页面网址入口,views中写视图函数
通过访问对应的url即可看到不同的返回
在templates中根据app的注册顺序,逐一在templates寻找他们html文件
静态文件
开发过程中一般将图片,css,js都当作静态文件处理放在static目录下并引用
请求和响应
- GET
- POST
数据库操作
Mysql数据库+pymysql
Django内部提供了ORM框架,ORM会帮我们将写下的代码翻译成sql语句,再去执行
安装第三方模块
pip install mysqlclient
Django连接数据库
在setting.py中的DATABASES中配置数据库
django的models.py中创建表,创建好之后使用以下的命令进行书信
1
2>python manage.py makemigrations
>python manage.py migrate
快速上手
注册app
- 这里的名字需要和app.py里的对应
编写url和视图函数的对应关系
- urls.py,导入views,修改对应关系
- viwes.py,编写视图函数
启动django项目
- 命令行启动
1
python mange.py runserver
- pycharm启动
- 提示url不对
- 修改URL,完成启动
至此,我们已经创建并运行了一个最简单的django项目
页面创建
urls.py
中写页面路径,views.py
中写页面函数
- 分别访问这三个页面可以看到不同的返回
templates目录
- 默认在app的目录下的templates目录寻找user_list.html(根据app的注册表顺序,逐一去他们的templates的目录寻找)
静态文件
- 在开发过程中一般将:图片,css,js都当作静态文件处理。
- static目录
在app目录下创建static文件夹
1 | {% load static %} |
模板语法
本质上:在HTML中写一些占位符,由后台返回的数据对这些占位符进行替换和处理。
视图函数中的render内部
- 读取含有模板语法的HTML文件
- 内部进行渲染,最终得到只包含HTML标签的字符串
- 最后将渲染完成的字符串返回给用户浏览器
数据替换
- if语法
请求和响应
请求
- 获取请求方式 GET/POST
1
print(request.method)
- 在url上传递值
1
print(request.GET)
- 在请求体中提交数据
1
print(request.POST)
响应
- 内容字符串返回给请求者
1 | return HttpResponse("返回") |
读取HTML的内容+渲染 ——> 将字符串内容返回给用户浏览器
1
return render(request, 'something.html',{"title": "来了"})
让浏览器重定向到其他页面
1
return redirect("https://www.baidu.com")
案例:用户登录
- url对应关系
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14import requests
from django.shortcuts import render, HttpResponse, redirect
def login(request):
if request.method == "GET":
return render(request, "login.html")
# 如果是POST请求,获取用户提交的数据
# print(request.POST)
username = request.POST.get("user")
password = request.POST.get("pwd")
if username == "root" and password == "123":
return HttpResponse("登录成功")
# return HttpResponse("登陆失败")
return render(request, 'login.html',{"error_msg": "用户名或密码错误"})login.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提交">
<span style="color: red">{{ error_msg }}</span>
</form>
</body>
</html>CSRF 相当于多了一层验证
- 在form表单中加上一句
数据库操作
MySQL数据库+pymysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14import pymysql
# 连接mysql
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="root", charset='utf8', db='bkys')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 发送指令(不要用字符串格式化做sql的拼接,安全隐患sql注入)
cursor.execute("insert into admin(username,password,mobile) values('bkys','adawd','2131153245')")
con.commit()
# 关闭
cursor.close()
conn.close()在models中写如下类
1
2class Department(models.Model):
title = models.CharField(max_length=16)执行命令
1
2python manage.py makemigrations
python manage.py migrate
安装第三方模块
1 | pip install mysqlclient |
- 安装成功
ORM
ORM会帮我们将写下的代码翻译给sql语句,再去数据库执行
- 创建,修改和删除数据库中的表。(无法创建数据库)
- 操作表中的数据(不用写SQL语句)
- 创建数据库
- 启动MySQL服务
- 创建数据库
- django连接数据库
在 settings.py文件中配置
- 注释原来的
django操作表
创建表
- 在models.py中
1 | class UserInfo(models.Model): |
- 这就相当于sql中的
1 | create table app01_userinfo( |
- 执行命令
前提:app已经注册执行完命令出现如下字样即为成功1
2python manage.py makemigrations
python manage.py migrate
- 此时查看数据库
- 新增表时,在models.py中新增类即可,然后执行命令
- 当需要在创建成功的表中修改时候
- 删除:注释后执行命令
- 新增:由已存在列中可能由数据,所以需要指定新增对应的数据
- 手动输入一个值
- 类中定义一个默认值
1
size = models.IntegerField(default=1)
- 允许可以为空
1
size = models.IntegerField(null=True, blank=True)
对表中的数据进行操作
新建
1
Department.objects.create(title="qwe")
删除
1
2Department.objects.filter(id=1).delete() # 删除id为1
Department.objects.all().delete() # 删除表中所有数据获取数据
data_list = [行(对象),行(对象),行(对象)] QuerySet类型1
2
3data_list = Department.objects.all() # 获取所有数据
for obj in data_list:
print(obj.id, obj.title)更新数据
1 | Department.objects.all().update(title="aaa") # 更新所有 |
案例:用户管理
- 展示用户列表
- url
- 函数
- 获取所有用户数据
- HTML渲染
- 添加用户列表
- url
- 函数
- GET,看到页面,输入内容
- POST,提交,写入数据库
- 删除用户
- url
views.py
函数
1 | def info_delete(request): |
用户管理界面
进行优化,使得添加和删除在一个页面
models.py
1 | from django.db import models |
views.py
1 | from django.shortcuts import render, HttpResponse, redirect, redirect |
info_add.html
1 |
|
info_list.html
1 |
|
- 如下所示