1.python中3个常用web框架
有django,flask,tornado,他们都主要由下面3大元素组成:
a:socket
b:路由跟视图函数匹配关系
c:模板渲染
几大框架的各自特点:
django:a,用了别人的wsgiref b,自己写的 c,自己写的
flask: a 用了别人的 b, 自己写的 c,用了别人的jinja2
tornado:a,自己写的 b,自己写的 c,自己写的
2.htpp协议:
特点:1.基于TCP/IP协议之上的应用层协议
2.基于请求-响应模式
3.无状态保存
4.无连接
#无状态保存。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这时为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。可是,随着web的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到宜家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。针对这个案例,网站为了能掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术。有了Coolkie再用HTTP协议通信,就可以管理状态了。
#无连接
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并受到客户的应答后,即断开连接采用这种方式可以节省传输时间。
请求格式:请求行,请求头,空行,请求体
响应格式:起始行,响应头部,空行,响应报文主体
重点:
请求:
请求首行 get /http/1.1 \r\n
请求头:key:value\r\n
请求体
响应:
响应首行 http/1.1 200 ok \r\n
响应头:key:value
响应体:html的代码
补充:使用get请求数据时,提交方式是?name=aa这种形式
127.0.0.1:8000/book_list/?name=aa
django中json数据从POST中是取不出来的,只能从body中取出,然后反序列化
3.django的安装与使用
方式1:在pacharm的Terminal命令行里输入 pip3 install django==1.11.9 #指定版本号为1.11.9,如果不指定版本号,则下载的是最新版
方式2:在pacharm的Project Interpreter右侧点+号,再输入django再点Specify version可以选择版本号
方式3:cmd命令行
d:进入d盘
cd /pb进入pb文件夹
django-admin startproject hg(项目名)开启新项目
cd pb/hg进入到项目文件夹
python3 manage.py startapp app01(app名)创建app
python3 manage.py runserver 127.0.0.1:8000开启项目
使用:项目中不要有中文!
计算机名字不要是中文
一个工程就是一个项目
django中app的概念:
大学:---------------项目
信息学院-------------------app01
物理学院-------------------app02
不同功能放在不同app里,便于管理。
创建app的方法:1在pecharm创建django项目时点More settings写上app名字
2在termainal里输入命令
python3 manage.py startapp app01
创建了app以后,要在settings里进行配置
4.settings配置
4.1templates
templates文件夹
将app路径放进配置
form提交的四种方式
1)<form action="http://127.0.0.1:8000/login/" method="post">
2)<form action="/login/" method="post"> 推荐使用
3)<form aciton='' method="post">
4)<form action='login.html' method='post'>
4.2static
在settings中要配置下静态文件
STATIC_URL='/static/' 一般不要改,指的是对应url中static这个模块,而不是static文件夹
在项目根文件夹下创建一个static文件夹,再进行添加路径
STATICFILES_DIRS=[
os.path.join(BASE_DIR,‘static’),创建的文件夹路径(可以写多个)
os.path.join(BASE_DIR,‘static’)
]
4.3视图层
1)request
request.method 前台提交过来的请求方式
request.POST(相当于字典) post形式提交过来的数据(http请求报文的请求体中)
request.POST.get('name') 推荐使用get取值(取出列表中的最后一个)
request.POST['name'] 不推荐使用,万一有网络延迟等问题,没有取到值的话会崩溃
request.POST.getlist('name') 取列表所有值
2)get与post
get:获取数据,页面,携带数据是不重要的数据(数据量有大小限制)
post:往后提交数据
5.APPEND_SLASH
在settings里面可以进行配置该参数
APPEND_SLASH=False则不会在输入网址时自动加/ 在django中,默认是设置成True的。
APPEND_SLASH=True则会在输入网址时自动加/
HttpResponse返回的是普通类型的字符串
6.MVC和MTV
django是MTV模式:
M:model 模型 负责业务对象和数据库的关系映射(ORM)
T:Template 模板 负责如何把页面展示给用户(html)
V:view 视图 负责业务逻辑,并在适当时候调用model和template
MVC模式:
M:model 模型
V:view 视图
C:controller 控制器:url+view
M是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
V是应用程序中处理数据显示的部分(就是显示)。
C是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
6.Django的生命周期
7.django中数据表迁移命令
1)python3 manage.py makemigrations 记录一下数据库的变化
2)python3 manage.py migrate 将变化同步到数据库中
3)新建app的命令
python3 manage.py startapp blog