zoukankan      html  css  js  c++  java
  • Django视图函数

    视图函数

      一个视图函数,简称视图,是一个简单的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的属性

  • 相关阅读:
    synchronized锁升级的过程(偏向锁到轻量锁再到重量级锁)转
    sprin 事务注解@Transactional的实现原理(转)
    springboot + redis + 注解 + 拦截器 实现接口幂等性校验(转)
    JAVA-TCP
    oracle查看连接信息
    C# 计算两个字符的相似度
    Java设计模式桥接模式
    C# Newtonsoft.Json.JsonReaderException:“Could not convert string to decimal:
    java设计模式结构型模式
    Java设计模式原型模式
  • 原文地址:https://www.cnblogs.com/mainstream/p/11073389.html
Copyright © 2011-2022 走看看