Web框架和Django框架
Web框架和Django框架
-
Web框架
1.web框架的本质
2.纯手撸web框架
3.基于wsgiref模块搭建web框架
4.动静态页面
5.jinja2模板语法
6.python主流web框架
-
Django框架
1.Django框架简介
2.Django基本操作命令
3.命令行与pycharm操作的区别
4.Django目录结构
5.Django小白必会三板斧
Web框架
web框架本质
-
web的本质
web框架的本质就是一个功能强大的socket服务端,浏览器可以视为拥有可视化界面的socket客户端
二者通过网络请求,实现数据交换
web框架就是将前端与数据库做出整合
-
前端界面、web框架、数据库三者的关系
前端(客户端)<> web框架 <> 数据库
纯手撸web框架
-
手撸框架的步骤以及具备知识点
1.socket服务端代码
2.使用HTTP协议将服务端代码与浏览器相连接
3.根据网址的后缀的不同请求不同的内容
4.请求方式
请求方式有两种,分别是GET和POST
GET:向服务端索要数据
POST:向服务端提交数据
5.请求数据的后缀名
可利用编译后的客户端代码,来获取所接受的全部内容(该内容是字符串的形式)
利用分割的方法取出网址的后缀名。然后使用if判断传递给客户端所展示的内容
target_url = data.decode('utf8').split(' ')[1]
6.纯手撸web代码的缺陷
1.socket代码重复率太大
2.针对请求数据格式的处理复杂,使用if判断过多
3.针对不同网址后缀的匹配方式过与麻烦
-
手撸框架
import socket server = socket.socket() # TCP协议 server.bind(('192.168.1.1', 8080)) # IP协议 PORT协议 server.listen(5) #连接池 while True: sock, address = server.accept() data = sock.recv(1024) sock.send(b'HTTP/1.1 200 OK\r\n\r\n') # print(data.decode('utf8')) # 从字符串中截取出需要的内容 target_url = data.decode('utf8').split(' ')[1] # / /index /login /reg /xxx if target_url == '/index': sock.send(b'index view') elif target_url == '/login': sock.send(b'login view') elif target_url == '/reg': sock.send(b'reg view') else: sock.send(b'404 error')
基于wsgiref模块搭建web框架
wsgiref内部封装了socket代码和对请求数据的处理
-
基于wsgiref模块的搭建代码
from wsgiref.simple_server import make_server def run(request, response): """ :param request: 请求数据 :param response: 响应数据 :return: 返回给客户端的数据 """ print(request) # 自动将请求数据全部处理成字典k:v键值对形式 response('200 OK', []) # 固定代码 无需掌握 return [b'hello big baby'] if __name__ == '__main__': server = make_server('127.0.0.1', 8080, run) # 任何访问127.0.0.1:8080的请求都会给第三个参数加括号调用 server.serve_forever() # 永久启动 -
wsgiref模块相比与socket创建的web框架的优化
1.wsgiref优化了使用socket代码重复编写
2.优化了数据格式请求的处理复杂且重复的操作
自动将请求的数据处理成字典的形式,取值时直接可用字典的取值方法取值
-
根据不同的网址后缀返回不同的内容
1.将其函数化,先从大字典中查找出记录网址后缀的键值对
2.针对面条版的代码首先应该考虑封装成函数
def index(request): return 'index' def login(request): return 'login' def register(request): return 'register' def error(request): return '404 error' urls = ( ('/index', index), ('/login', login), ('/register', register), )3.将其模块化——根据功能的不同划分到不同的py文件中
-
主要功能的划分
文件 功能 url.py 对应关系 views.py 功能函数 start.py 启动文件 templates 文件夹 存储html
-
动静态页面
-
动静态页面的区别
页面 区别 动态网页 页面上的数据不是全部写死的,部分是动态获取的(后端传入) 静态网页 页面上的数据直接写死,要想改变只能改变源码
jinja2模块
jinja2能够让我们在html文件内使用类似于后端的语法来操作各种数据类型
-
添加jinja2第三方模块
pip38 install jinja2
-
在jinja2模块下将字典数据展示
view from jinja2 import Template def get_dict(request): user_dict = {'name': 'jason', 'pwd': 123, 'hobby': ['read', 'run', 'music']} with open(r'templates/myhtml04.html','r',encoding='utf8') as f: data = f.read() temp = Template(data) res = temp.render(data=user_dict) # 将字典传递给html页面 页面上通过data即可获取(data仅仅是一个变量名) return res
jinja2模块语法
<h1>{{ data }}</h1> # 获取view视图获取的字典数据
# 获取字典键的三种表达方式
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1>
# 使用for循环获取的语法
{%for i in data%} {% endfor %}
{% for user in user_data %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.age }}</td>
</tr>
{% endfor %}
python主流web框架语法
-
python主流框架分别是什么,又有那些缺陷
web框架 概括 缺陷 django框架 大而全 自身携带的功能非常的多 开发小项目时,使用该框架大材小用 flask框架 小而精 自身携带的功能非常的少
主要依赖于第三方模块受限于第三方模块的开发 tornado框架 异步非阻塞 该框架快到可以作为游戏服务器 上手难度是三者最高的 fastapi框架、sanic框架 当前最近流行的 重点是前三种框架
Django框架
Django框架的简介
-
版本问题
版本 状态 维护的具体版本 维护年限 1.x 同步 1.11版本 2018-2020 2.x 同步 2.2版本 2020-2022 3.x 异步 3.2版本 2022-2024 你无论使用什么版本都可以 区别不大
-
启动的注意事项
1.计算机名称尽量不要有中文
2.项目中所有的py文件名尽量不要用中文
3.不同版本的python解释器配合不同版本的django 会有一些报错
仔细查找一下报错信息 里面会提示你是哪个py文件里面的代码出错
找到那一行代码 把逗号删除即可
widgets.py 152
4.一个pycharm窗口只允许有一个项目 不要做项目的嵌套 -
验证django是否下载成功
cmd终端输入django-admin
Django的基本操作命令
-
命令行操作
-
创建django项目
django-admin startproject 项目名
-
启动django项目
1.先切换到项目目录下
cd 项目名
2.执行启动目录
python38 manage.py runserver ip:port
-
访问django服务端
浏览器直接访问
-
创建app应用
python38 manage.py startapp 应用名
django框架类似于是一个空壳子 给你提供所需的资源
至于到底要写哪些功能 需要通过创建app来划分
eg:django初始项目可以看成是一所大学
app就相当于是大学里面的各个学院
-
-
pycharm操作
鼠标点点点即可
在启动django项目的时候 一定要确保一个端口只有一个项目
命令行与pycharm操作的区别
1.命令行不会自动创建templates文件夹
2.命令行不会在配置文件编写关于templates文件夹的配置
'DIRS': [os.path.join(BASE_DIR, 'templates')]
3.pycharm自动创建的第一个应用会自动注册到配置文件中
4.针对db.sqlite3文件不用去在乎它有没有创建 只要运行了django会自动出来
Django目录结构
-
Django目录分为与项目同名的文件夹、应用名文件夹、自带了一个小型的数据库——db.sqlite3
-
与django同名文件夹下的文件
项目同名文件夹 作用 init.py 很少用 主要做一些冷门配置 settings.py 项目配置文件 urls.py 对应关系(目前简单的理解:网址后缀跟函数名) wsgi.py django服务 基本不用 manage.py django入口文件 templates文件夹 存储项目所需的html文件 -
应用名文件夹(可以有多个)下的文件
应用名文件夹(可以有多个) 作用 migrations文件夹 orm相关(数据库打交道的记录) init.py 很少用 主要做一些冷门配置 admin.py django自带的后台管理 apps.py 创建应用之后用于应用的注册 models.py 存储与数据库表相关的类 tests.py 自带的测试文件 views.py 存储业务相关的逻辑代码(函数、类) -
django重点会分成四层
文件 分层 urls.py 路由层 view.py 试图层 templates文件夹 模板层 models.py 模型层
Django小白必会三板斧
-
HttpResponse
主要用于直接返回字符串类型的数据
def index(request): return HttpResponse('你好啊 我是django2.2.22版本') -
render
主要用于返回html页面 并且支持模板语法
def func(request): user_dict = {'name': 'jason', 'pwd': 123} return render(request, 'func.html', {'data': user_dict}) -
redirect
主要用于页面重定向
def login(request): # return redirect('https://www.baidu.com/') return redirect('/index/') 重定向就是本应该由A页面跳转到B页面,结果跳转到C页面

浙公网安备 33010602011771号