视图函数

Posted mainstream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图函数相关的知识,希望对你有一定的参考价值。

视图函数

  一个视图函数,简称视图,是一个简单的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.inputselectcheckboxradiotextareafile必须有name的属性

 

以上是关于视图函数的主要内容,如果未能解决你的问题,请参考以下文章

Flask 视图函数和视图类

Django - - - -视图层之视图函数(views)

Flask03-2-视图函数和视图类

RoundhouseE - 函数前运行视图

Django视图函数函数之视图装饰器

为啥这个视图函数不是免费的以太函数?