04-视图层——请求对象-request

请求过来之后,路径匹配成功之后,一定要有一个视图函数去处理逻辑并返回一个相应内容

视图函数

(1)一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片,任何东西都可以
(2)无论视图本身包含什么逻辑,都要返回响应。
(3)代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。
(4)为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。

一个例子说明:

全局的urls

from django.contrib import admin
from django.urls import path,re_path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    #分发
    re_path('^app01/',include('app01.url'))
]

app01的url.py

from django.urls import path,re_path        
from app01 import views

urlpatterns = [
    #注意后面的斜杠一定要加!
    re_path('^index/$',views.index),
    
    #这里补充一点:如果如想只在浏览器输入:http://127.0.0.1:8000/app01 就访问index
    #可以这样做:——>就好比我只输入根目录的地址就能进主页了!
    #re_path('^$',views.index),
        
]

app01中views.py文件

from django.shortcuts import render,HttpResponse,HttpResponseRedirect,redirect
def index(request):
    import datetime
    n = datetime.datetime.now()
    now = n.strftime('%Y-%m-%d:%X')
    return render(request,'index.html',{'datetime':now})

templates目录中index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <p>{{ datetime }}</p>
</body>
</html>

重点:请求对象——HttpRequest

在上面例子的基础之上拓展

app01中views.py文件:——这里修改一下之前的

from django.shortcuts import render,HttpResponse,HttpResponseRedirect,redirect
        def index(request):

重点:request常用的属性

请求方式:request.methon

请求方式:直接访问时是GET,用form的submit是POST——>见之前的例子
具体操作详见03的登陆验证的例子
print(request.methon)

请求数据:——>request.GET与request.POST

哪一个有值,完全取决于请求的方式——>值其实是一个字典!
GET请求带上数据的方式:http://127.0.0.1:8000/app01/index/?name=whw&age=22

print(request.GET)
print(request.GET.get('name')
print(request.POST)
#这里的pwd是form表单里面input标签的name属性的值
print(request.POST.get('pwd'))

请求路径:——>request.path

“url”组成——> 协议://IP:port/路径?参数(GET请求数据)
例如:http://127.0.0.1:8000/app01/index/?name=whw&age=22
这里路径就是 app01/index/
打印出来是:/app01/index/

print(request.path)

其他请求对象

request.encoding
A.一个字符串,表示提交的数据的编码方式(如果为 None 则表示使用 DEFAULT_CHARSET 的设置,默认为 'utf-8')。这个属性是可写的,你可以修改它来修改访问表单数据使用的编码。

B.接下来对属性的任何访问(例如从 GET 或 POST 中读取数据)将使用新的 encoding 值。如果你知道表单数据的编码不是 DEFAULT_CHARSET ,则使用它。

其他

重点:request常用的方法

get_full_path()方法

这里需要注意:
如果GET请求方式输入:http://127.0.0.1:8000/app01/index/?name=whw&age=22
    path属性得出的只是/app01/index/
    而get_full_path()方法得出的是:/app01/index/?name=whw&age=22

print(request.get_full_path())

is_ajax()方法——判断请求是不是ajax方法

其他方法汇总

request.body:得到用户提交数据的原始数据类型 b'username=chao&passowrd=123'
request.GET
request.POST
request.method 获取请求方法
request.path_info  获取用户请求路径
request.get_full_path() 获取除域名之外的全路径,包括请求参数
request.META  获取请求头的元信息
#request.META.get('HTTP_USER_AGENT')   拿到的是浏览器的信息——在爬抽屉的时候用到~抽屉的反爬是做了user_agent的验证
#request.META.get('REMOTE_ADDR')    拿到的是客户端的地址

posted on 2019-05-17 21:13  江湖乄夜雨  阅读(206)  评论(0编辑  收藏  举报