Django 视图层

1.1 request请求对象 属性/方法

  • django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性
(1)request.GET 类似于字典对象,包含HTTP GET所有参数
(2)request.POST 类似于字典对象,请求中包含表单数据,将这些数据封装成 QueryDict 对象。
(3)request.body 一个字符串,代表请求报文的主体
(4)request.path 一个字符串,请求路径的组件
(5)request.method 一个字符串,表示请求使用的HTTP 方法。必须使用大写。
(6)request.get_full_path() 返回请求路径组件(包含数据部分)
(7)request.files 一个类似于字典的对象,包含所有的上传文件的信息
注:FILES 中的每个键为<input type="file" name="" /> 中的name,值则为对应的数据。
,FILES 只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。
--------------------------------------------
注:
form表单,不写method ,默认是get请求
#get与post应用场景
1 get:请求数据,请求页面,
2 post请求:向服务器提交数据
  • 代码:
模板:
<body>
    {#不写method ,默认是get请求#}
<form action="" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="name">
    密码:<input type="text" name="password">
    文件:<input type="file" name="myfile">
    <input type="submit">
    </form>
</body>

  

 urls: re_path(‘^index1/‘,views.index1) views: def index1(request): print(type(request )) #<class ‘django.core.handlers.wsgi.WSGIRequest‘> print(request) #<WSGIRequest: GET ‘/index1/‘> print(request.POST ) #<QueryDict: {}> #< QueryDict: {‘name‘: [‘hh‘], ‘password‘: [‘77‘], ‘myfile‘: [‘‘]} > print(request .GET) #<QueryDict: {}> print(request.path) # 请求路径的组件/index1/ print(request.get_full_path()) #请求组件,包含数据部分 print(HttpResponse) #<class ‘django.http.response.HttpResponse‘> print(request.body) # b‘‘ get 请求没有内容,post请求内容为b‘name=rr&password=tt‘ return render(request ,‘index.html‘) 

1.2 HttpResponse响应对象

1.2.1 形式一 HttpResponse():

  • HttpResponse()括号内直接跟一个具体的字符串作为响应体

1.2.2 形式二 render():

  • 作用:结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象
  • 格式:
render(request, template_name[, context])
参数:
(1)request: 用于生成响应的请求对象。
(2)template_name:要使用的模板的完整名称,可选的参数
(3)context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
例:
book_list=Book.objects.all()
    return render(request,‘book_list.html‘,{‘book_list‘:book_list})

1.2.3 形式三 redirect()

  • 重定向url
def my_view(request):
    return redirect(‘/some/url/‘)

或者是完整的url:
def my_view(request):
    return redirect(‘http://www.baidu.com/‘)

  

  • 代码:
 obj=render(request,‘index.html‘)
    print(obj) #<HttpResponse status_code=200, "text/html; charset=utf-8">
    print(type(obj)) #<class ‘django.http.response.HttpResponse‘>
    return obj

    obj = redirect(‘/index2/‘)
    print(obj) #<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/index2/">
    return obj

  

1.3 JsonResponse

  • 向前端返回一个json格式字符串的两种方式
方式一:
import json
    dic={‘name‘:‘lqz‘,"age":33}
    return HttpResponse(json.dumps(dic))
方式二:
from django.http import JsonResponse
    dic = {‘name‘: ‘lqz‘, "age": 33}
    return JsonResponse (dic)

  

--------------------------------------- 注:在返回列表的时候要设置safe=False from django.http import JsonResponse li = [1, 2, 3, 4] return JsonResponse(li,safe=False) 

1.4 CBV和FBV

  • CBV基于类的视图(Class base view)和FBV基于函数的视图(Function base view)

1.4.1 CBV

views:
from django.views import View
# 先导入View,并继承
class Test(View):
     #对请求进行判断,分发
     def dispatch(self, request, *args,**kwargs ):
        #加逻辑
        print(‘eeeee‘)  #先打印eeeee,然后执行get/post请求函数,再打印fffff
        obj=super().dispatch(request, *args,**kwargs) #继承父类属性
        #加逻辑
        print(‘fffff‘)
        return obj

    def get(self,request):
        obj=render(request,‘index.html‘)
        print(type(obj)) #<class ‘django.http.response.HttpResponse‘>
        return obj
    def post(self,request):
        print(request.POST) #<QueryDict: {‘name‘: [‘hh‘], ‘password‘: [‘ff‘]}>
        return HttpResponse (‘ok‘)

urls:
 path(‘test/‘,views.Test.as_view()) #.as_view()固定写法

  

1.5 文件上传

模板:
<body>
    {#不写method ,默认是get请求;在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据#}
<form action="" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="name">
    密码:<input type="text" name="password">
    文件:<input type="file" name="myfile">
    <input type="submit">
    </form>
</body>

视图函数:
from django.views import View
class Test(View):
     def get(self,request):
        obj=render(request,‘index.html‘)
        print(type(obj)) #<class ‘django.http.response.HttpResponse‘>
        return obj
    def post(self,request):
        print(request.POST) #<QueryDict: {‘name‘: [‘hh‘], ‘password‘: [‘ff‘]}>
        # ff是文件对象,可以取出内容保存到本地 <MultiValueDict: {‘myfile‘: [<InMemoryUploadedFile: 响应状态码.PNG (text/plain)>]}>
        ff=request .FILES.get(‘myfile‘)
        # print(ff.name) # 调get方法取出文件 响应状态码.PNG
        file_name=ff.name
        print(type(ff))  #<class ‘django.core.files.uploadedfile.InMemoryUploadedFile‘>
        with open(file_name ,‘wb‘) as f:
            for line in ff.chunks():
                f.write(line)
        return HttpResponse (‘ok‘)

urls:
path(‘test/‘,views.Test.as_view()) #.as_view()固定写法

  

原文地址:https://www.cnblogs.com/quqinchao/p/9898606.html

时间: 2024-10-09 23:13:42

Django 视图层的相关文章

54.django视图层(views)的视图函数

1.视图层概念 视图函数,其实就是一个简单的函数,它接收web请求并返回web响应(响应的可以是一个html,一个重定向,一个xml文档等等) 每个视图函数都负责返回一个HttpResponse对象. 1.1 HttpRequest对象属性 django将请求报文中的请求行.首部信息.内容主体封装成 HttpRequest 类中的属性 ''' path: 请求页面的全路径,不包括域名 method: 请求中使用的HTTP方法的字符串表示.全大写表示.例如 if req.method=="GET&

Django视图层

1. 视图函数 视图函数,简称视图,是一个简单的Python函数,它接受Web请求并且返回Web响应,本质就是一个函数 视图的参数 一个HTTPResponse实例 通过正则表达式组获取的位置参数 通过正则表达式组获取的关键字参数 在应用目录下默认有views.py文件, 一般视图都定义在此文件中 如果处理功能过多,可将函数定义到不同的py文件中 视图的对象 HTTPResponse对象 HTTPRequest对象 2. HTTPRequest对象 HTTP应用的信息是通过 请求报文 和 响应报

Django视图层(views.py)

视图函数 接受Web请求并且返回Web响应.由此,视图函数应该接收请求对象HttpRequest,并返回响应对象HttpResponse. request django将请求报文中的请求行.首部信息.内容主体封装成 HttpRequest 类中的属性. request.scheme # 请求的协议,一般为http或者https,字符串格式(以下属性中若无特殊指明,均为字符串格式)request.body   #http请求的主体,二进制格式.request.path        # 所请求页面

6 Django的视图层

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

Django的视图层

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

Django之视图层

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

Django -- 6.视图层

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

关于Django的视图层

视图函数 通俗来讲:视图函数是在url配置是所匹配好了将要调用的对应函数(逻辑代码)        是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以.无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你的Python目录下面.除此之外没有更多的要求了--可以说"没有什么神奇的地方".为了将代码放在某处,约定是将视图放置在项目或应用

五十六、Django路由层与视图层

一.路由层 1.路由匹配规律 # 网站首页路由:url(r'^$',views.home) # 网站不存在页面:url(r'',views.error) urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.home), url(r'^test/$',views.test), url(r'^testadd/$',views.testadd), url(r'',views.error) ] # 注意:第一个参数是正则表达