视图函数
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。
一、视图函数
一定包含两个对象:
requset---->用户请求相关的所有信息(对象)
Httpresponse---->响应字符串
注:它接受的参数,第一个参数默认就是request对象,它的返回值一定要是一个HttpResponse类型
- FBV --->把视图写成一个函数
path('login/',views.Login.as_view(),name="login"),#CBV方式 (Login(类),as_view(类方法)) def func(request): #在函数中如何区分GET请求和POST请求 if request.method == "POST": -->这是POST请求 -->提交数据 if request.method == "GET": -->这是GET请求 -->获取一个页面
下面是一个返回当前日期和时间作为HTML文档的视图:
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)让我们逐行阅读上面的代码:
-
首先,我们从 django.http模块导入了HttpResponse类,以及Python的datetime库。
-
接着,我们定义了current_datetime函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request。
注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够精确地反映出它的功能。
-
这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。
视图函数,围绕着两个对象进行:HttpResponse和HttpRequest -
- CBV --->把视图写成一个类
导入基类 from django.views import View class Login(View): def dispatch(self): 在请求前和请求之后执行 hasattr("get") 具体我们会在后面讲cookie和session时候再讲(登录) def get(self, request,): -->这是GET请求 def post(self,request): -->这是POST请求
二、HttpRequest
request---->请求信息 属性:
request.path # 获取访问文件路径
request.method属性 #获取请求中使用的HTTP方式(POST/GET)
request.body #含所有请求体信息 是bytes类型
request.GET #GET请求的数据(类字典对象) 请求头中的url中?后面拿值
request.POST # POST请求的数据(类字典对象) 请求体里拿值
request.COOKIES #包含所有cookies的标准Python字典对象;keys和values都是字符串。
request.FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
filename: 上传文件名,用字符串表示
content_type: 上传文件的Content Type
content: 上传文件的原始内容
request.user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
可以通过user的is_authenticated()方法来辨别用户是否登陆:
if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
时该属性才可用
request.session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用
request.GET.get('name') 拿到GET请求里name的值
如果某个键对应有多个值,则不能直接用get取值,需要用getlist,如:
request.POST.getlist("hobby")
请求url:http://127.0.0.1:8000/index.html/23?a=1
request.path : 请求路径
request.path结果为:/index.html/23
request.get_full_path()
request.get_full_path()结果为:/index.html/23?a=1
方法:
get_full_path()
注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:
request.POST.getlist(
"hobby"
)
三、HttpResponse
https://www.cnblogs.com/huchong/p/7718393.html
Form表单提交数据、三要素:
1.action="提交的URL地址",method="post"
2. form表单里必须包含一个submit按钮
3.input、select、checkbox、radio、textarea、file必须有name的属性