目录
- 1018 初识web框架和Django框架
- HTTP协议
- 1、四大特性
- 2、数据格式
- 3、响应状态码
- 纯手撸一个web框架
- 简易版
- 升级版
- 动静态网页
- 静态网页
- 动态网页
- jinja2模块-模板渲染
- python三大主流web框架
- Django
- Flask
- Tornado
- web框架组成部分
- Django
- 注意事项
- django版本问题
- django安装
- 如何使用
1018 初识web框架和Django框架
HTTP协议
超文本传输协议
服务端:24小时提供服务、有固定的ip、支持高并发
1、四大特性
1、基于TCP/IP之上作用于应用层
2、基于请求响应
3、无状态-不保存用户状态,所以才有了cookies、session、token
4、无连接
长连接:websocket(HTTP协议的大补丁)
2、数据格式
一般两个格式都一样
1、请求格式
请求首行(请求方式、协议版本...)
请求头(一大堆k:v键值对)
# 这里一定要换行,也可以写个\r\n
请求体(真正的数据。发post请求的时候才会有,如果是get请求不会有)
请求方式:
- get请求:朝别人要数据(没有请求体,get请求也可以携带参数)
- post请求:向别人提交数据(eg:用户登录)
url: 统一资源定位符
2、响应格式
响应首行
响应头
# 这里一定要换行,也可以写个\r\n
响应体
3、响应状态码
用特定的数字表示一些意思:
- 1XX:服务端已经成功接收到了你的数据,正在处理,你可以继续提交其他数据
- 2XX:服务端成功响应(200-请求成功)
- 3XX:重定向(例如在一个网站,没有登录情况下点击一个功能,但是自动跳转到登录页面)
- 4XX:请求错误(404-请求资源不存在、403-拒绝访问(资源存在,但是你不符合条件))
- 5XX:服务器内部错误(500-服务器错误)
纯手撸一个web框架
简易版
写一个服务端就行,然后在浏览器中访问127.0.0.1:8080
就能在页面上显示hello baby了
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
while True:
conn, addr = server.accept()
data = conn.recv(1024)
print(data)
conn.send(b'HTTP/1.1 200 OK\r\n\r\nhello baby~')
conn.close()
升级版
可以用wsgiref模块来代替socket的处理和http协议的处理
from wsgiref.simple_server import make_server
# 用来对socket处理和http协议的处理
def run(env, response):
"""
:param response: 响应相关的所有数据
:param env: 请求相关的所有数据
:return:
"""
response('200 OK', [])
# print(env)
current_path = env.get('PATH_INFO')
if current_path == '/index':
return [b'index']
elif current_path == '/login':
return [b'login']
else:
retutn [b'404 error']
if __name__ == '__main__':
server = make_server('127.0.0.1', 8080, run) # 实时监听该地址,只要有客户端来连接,统一交给run函数去处理
server.serve_forever() # 一直启动服务端
动静态网页
静态网页
数据是写死的,万年不变
动态网页
数据是实时获取的
例如:
- 后端获取当前时间展示到前端
- 后端获取数据库中的数据展示到前端
jinja2模块-模板渲染
后端获取的数据传递给html页面>>>>>>>模板的渲染
jinja2模块专门用来模板渲染,把数据放到html页面上
模板语法(极其贴近python后端语法):利用模板语法,实现后端传递数据给前端html页面
可以让前端页面字典可以取值、还支持基础语法
变量相关:用{{ }}
{{ user }}
{{ user.name }}
{{ user['pwd'] }}
{{ user.get('hobby') }}
逻辑相关:用{% %} ,,eg:for循环
{% for i in user_list %}
{% endfor %}
python三大主流web框架
Django
大而全,自带的功能特别特别多,类似于航空母舰,有时候过于笨重
Flask
小而精,自带的功能特别特别少,类似于游骑兵,但它的第三方的模块特别特别多,如果将flask第三方模块全部加起来,可以超过django,但是比较依赖于第三方模块,可能会出问题
Tornado
异步(任务提交的方式)非阻塞(软件运行状态),效率高,牛逼到可以开发游戏服务器
web框架组成部分
A:socket部分
B:路由与视图函数对应关系
C:模板语法
对于三大框架来说
Django:
A用的别人的,wsgiref 模块
B自己写的
C自己写的
Flask:
A用的别人的,werkzeug(基于wsgiref)
B自己写的
C用的别人的,jinja2 模块
Tornado:
三个都是自己写的
Django
注意事项
1、计算机的名称不能有中文
2、一个pycharm窗口就是一个项目
3、项目名里面尽量不要用中文
django版本问题
1.X 2.X 推荐使用1.11.9~1.11.13
django安装
pip3 install django==1.11.11
一个django项目就类似于是一所大学,而app就类似于大学里面的学院
django其实就是用来一个个应用的
一个app就相当于一块独立的功能
用户功能
管理功能
django支持任意多个app
如何使用
命令行使用:
创建django项目:django-admin startproject mysite
启动django项目:先进到mysite文件夹,然后 python manage.py runserver
创建应用app:python manage.py startapp app01
注意:新创建的app需要去settings配置文件中注册,pycharm只会帮你注册第一个你在创建项目的时候写的应用,再创建app一定要去settings配置文件的installed中添加app名。
注意:使用命令行创建django项目,不会自动创建templates文件夹,需要自己创建,需要在settings文件中手动在TEMPLATES中的空列表中写配置,写上os.path.join(BASE_DIR, 'templates')
pycharm使用:
New Project>>>Django>>>直接在第一栏里写项目名,然后第一个下拉框选第二个本机的,然后第二个下拉框直接写app名。
在启动django项目的时候,一定要确保一个端口只有一个django项目
项目名:
跟项目名同名的文件夹
settings.py--暴露给用户的配置文件
urls.py--路由与视图函数的对应关系
应用名
migrations文件夹--存放数据库迁移记录的
admin.py--django后台管理
apps.py--注册相关
models.py--模型类
tests.py--测试文件
views.py--存放视图函数
templates文件夹--模板文件夹,存放一大堆html文件
manage.py--django入口文件