Python Django views的理解

web的访问流程 
* 输入url
* 根据域名找ip
     * 先在hosts文件下找   (c:/windows/system32/drivers/etc/hosts)
     *然后再在 DNS找 (防止假的域名服务器,wifi)
*  发起http请求
     * 找到主机(ip)
     * 找到监听80端口的程序
     * TCP/UDP 传输层协议
     * ip 网络层
     * http属于应用层
     * tcp/ip 网络传输层,协议簇
* 服务器处理
* 服务器返回数据
* 浏览器下载到本地
* 浏览器渲染   
url  
* url uniform resouces location(统一资源定位符),http
* url格式
     * http://www.baidu.com:80/query/2015/10/9/?keyword=美女&type=图片 
         * 协议:主机:端口/路径?参数
         * 协议:http
         * 主机:www.baidu.com
         * 端口:80
         * 路径:query/2015/10/9/
         * 参数:keyword=美女 
    * uri uniform resouces Identifier (统一资源标识符),uri是url超集:file://文件地址
Django url解析流程 
* 解析的路径,通过正则匹配路径找到相应的调用函数
* 先找根urls,根路由(settings里面有一个ROOT_URLCONF)
     * 第一件事是正则匹配,
     * 匹配的顺序 
     * 匹配规则一定要准确
具名捕获
* page/(\d+)  定义的view函数除了request,还会传递捕获的字符串
     * 所有参数,还有捕获传递的都是字符串 
* 具名:(?P<categoryId>\d+) 关键字传递参数

* 默认参数

下面是举例:

def index(request,num=0):
                       return HttpResponse('我是page'+num+'页面')

 url(r'^page/(\d+)$',views.index),
              url(r'^page/$',views.index),
* url的第三个参数也可以传递值


url(r'^page/$',views.index,kwargs={'num':'10'}),

 错误界面 

*设置 DEBUG=FALSE

* ALLOW_HOSTS=['127.0.0.1']
 * ALLOWED_HOSTS = [
   '*'

* 在templates里面定义
 * 500.html  服务器出问题了
 * 404 
 * 403 (没有权限) 
 * 400 (HttpBadRequest)


http网络请求
* http协议特点:无状态
     * http一旦请求完成,下次再请求服务器,服务器就不认识client 
     * 头(请求头,响应头)头里面携带了服务器和客户端沟通的信息
    * 请求
#请求头中的信息都是给服务器看的
GET http://127.0.0.1:8000/ HTTP/1.1  请求行:请求方式 主机  协议
**Host: 127.0.0.1:8000
Connection: keep-alive 保持较短时间连接,反复和服务器通讯,给服务器看的
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 客户端信息 给服务器看的 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/ webp,image/apng,*/*;q=0.8 客户端能够显示的信息  给服务器看的
Accept-Encoding: gzip, deflate, br 压缩的方法
Accept-Language: zh-CN,zh;q=0.9
Cookie: name1="2|1:0|10:1508218301|5:name1|8:5byg5LiJ|c9d2e2a9c7618a9f7d9577a0d08465781bc8e88c86cc5652457e0328dfb3d937"; csrftoken=sguSgAQGDpWlhm7wE7N0yaP8t2vSHNKFfmhZxPPkLIQAG72EMvsMa4Ec055j04jB**请求头

请求空行
请求体(POST)
 
* 响应
HTTP/1.0 200 OK 响应行:协议 状态码 状态描述
Date: Fri, 27 Oct 2017 06:48:23 GMT 
Server: WSGIServer/0.1 Python/2.7.13 服务器版本
X-Frame-Options: SAMEORIGIN  网页中能不能显示iframe:SAMEORIGIN(只能显示自己域名下的iframe)
Content-Type: text/html; charset=utf-8   (文本的类型)
Content-Length: 12   (响应体长度)
    响应空行
我是百度   (响应体)

* 行,头,体
* http请求方式
 * get (查找)  好多浏览器会缓存get请求信息。
 * post (修改/添加)
 * delete (删除)
 * put
 * CONNECT
 *  PATCH
 *  HEAD
 *  ....
 request请求 
* request对象封装了上面的请求信息
* request.META 描述信息
* 所有在浏览器(url),超链接输入的都是GET请求方法
* GET 
     * 参数  http://127.0.0.1:8000/?name=%E5%BC%A0%E4%B8%89 放在url后面  
     * request.GET.get('name')
     * request.GET.keys() 获得查询参数中所有key
     * request.GET.values() 获得查询参数中所有的values
     * request.GET.getlist() 多个值
     * 'age' in request.GET
     * QueryDict 查询字典
     * get请求的查询参数放在url里面。url请求参数长度不能超过2k
* POST
     * 查询参数放在请求体 


POST http://127.0.0.1:8000/search HTTP/1.1
Host: 127.0.0.1:8000
Connection: keep-alive
Content-Length: 67
Cache-Control: max-age=0
Origin: http://127.0.0.1:8000
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://127.0.0.1:8000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: name1="2|1:0|10:1508218301|5:name1|8:5byg5LiJ|c9d2e2a9c7618a9f7d9577a0d08465781bc8e88c86cc5652457e0328dfb3d937"; csrftoken=sguSgAQGDpWlhm7wE7N0yaP8t2vSHNKFfmhZxPPkLIQAG72EMvsMa4Ec055j04jB

keyword=meinv&options=%E5%B9%B4%E8%BD%BB&options=%E6%88%90%E7%86%9F  请求体
![](https://i.imgur.com/njvkmqA.png)
 * QueryDict get请求里面的方法在POST中统统适用
以上内容参考尚学堂笔记


猜你喜欢

转载自blog.csdn.net/qq_41386300/article/details/80862163