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') 拿到的是客户端的地址