views 视图函数

视图

1. CBV和FBV

    FBV (function based view)
    CBV (class based view )

    CBV写法:
        from django.views import View

        class AddPublisher(View):

            def get(self, request):
                print(‘这个是get‘)
                return render(request, ‘add_publisher.html‘)

            def post(self, request):
                print(‘这个是post‘)

                return render(request, ‘add_publisher.html‘, {"err_name": add_name, ‘err_msg‘: err_msg})

    使用:
        url(r‘^add_publisher/‘, views.AddPublisher.as_view()),
2. CBV简单的流程:
    1. AddPublisher.as_view() ——》 view函数
    2. 当请求到来的时候才执行view函数
        1. 实例化AddPublisher  ——》 self
        2. self.request = request
        3. 执行self.dispatch(request, *args, **kwargs)
            1. 判断请求方式是否被允许
                handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
                通过反射获取对应的方法
                GET  ——》  get
                POST ——》  post

            2. 执行获取到的方法  get(request,)  或者post(request,)
            3. 得到HttpResponse对象,返回给self.dispatch
        4. 得到HttpResponse对象,返回django处理

3. request
    request.method    ——》 请求的方式 8种  GET POST PUT DELETE OPTIONS
    request.GET		  ——》 字典  url上携带的参数
    request.POST	  ——》 字典  form表单通过POST请求提交的数据

    print(request,type(request))  #当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
	print(request.method)		# 请求中使用的HTTP方法的字符串表示,全大写表示。
	print(request.GET)          #包含所有HTTP  GET参数的类字典对象
	print(request.POST)			# 包含所有HTTP POST参数的类字典对象
	print(request.path_info)	# 返回用户访问url,不包括域名
    print(request.body)			# 请求体,byte类型 request.POST的数据就是从body里面提取到的
    print(request.scheme)		# 表示请求方案的字符串(通常为http或https)
    print(request.get_host())	# ip 端口
    print(request.get_full_path())	# 返回包含参数(查询字符串)的url(不包括域名)  request.FILES    # 上传的文件

4. response
    from django.shortcuts import render, HttpResponse ,redirect

    HttpResponse(‘字符串‘)				—— 》浏览器显示字符串
    render(request,‘模板名字‘,{})      —— 》返回一个完整的页面
    redirect(URL)    					—— 》跳转 重定向  location:url 

5. JsonResponse
	JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。类似于HttpResponsed的使用方法
    from django.http import JsonResponse

	ret = JsonResponse({‘foo‘: ‘bar‘})
	print(ret.content)
        return  ret

	# b‘{"foo": "bar"}‘

  

def json_data(request):
    date = {"name": ‘alex‘, ‘age‘: 84}
    import json
    return HttpResponse(json.dumps(date))  #content_type: application/json 

    return JsonResponse(date)   #content_type: application/text

  

类型: content_type: application/json 如果是传递的是字符串 content_type: application/text 默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。 ret = JsonResponse([1, 2, 3], safe=False)
6.装饰器的使用1. FBV的装饰器@装饰器

2. CBV的装饰器:from django.utils.decorators import method_decorator

1. 直接在方法上加:    @method_decorator(wrapper)    def get(self, request)

2. 给dispatch方法加    @method_decorator(wrapper)    def dispatch(self, request, *args, **kwargs)

3. 给类加    @method_decorator(wrapper, name=‘post‘)    @method_decorator(wrapper, name=‘get‘)    class AddPublisher(View)
 
# @method_decorator(wrapper, name=‘post‘) # 方法三:给类加,哪个方法用加哪个方法的名字
# @method_decorator(wrapper, name=‘get‘)
class AddPublisher(View):

    @method_decorator(wrapper)	# 方法二:给dispatch方法加
    def dispatch(self, request, *args, **kwargs):
        print(‘执行get方法之前‘)
        ret = super().dispatch(request, *args, **kwargs)
        print(‘执行get方法之后‘)
        return ret
	@method_decorator(wrapper)   # 方法一:直接在方法上加
    def get(self, request):
        print(‘这个是get‘)
        # print(self.request)
        return render(self.request, ‘add_publisher.html‘)

    def post(self, request):
        print(‘这个是post‘)
        print(request.body)
        err_msg = ‘‘
        add_name = request.POST.get(‘new_name‘)
        pub_list = models.Publisher.objects.filter(name=add_name)
        if add_name and not pub_list:
            models.Publisher.objects.create(name=add_name)
            return redirect(‘/publisher/‘)
        if not add_name:
            err_msg = ‘不能为空‘
        if pub_list:
            err_msg = ‘出版社已存在‘

        return render(request, ‘add_publisher.html‘, {"err_name": add_name, ‘err_msg‘: err_msg})

  



原文地址:https://www.cnblogs.com/perfey/p/9671354.html

时间: 2024-08-26 20:28:01

views 视图函数的相关文章

Django之views视图函数

views视图函数属于MTV中逻辑处理的部分视图函数包含着两个对象,HttpRequest对象和HttpResponse对象 一.HttpRequest对象 HttpRequest对象在Django中会默认传到views函数中作为第一个参数 HttpRequest的属性: 属性 说明 path 请求页面的全路径,不包括域名 method 请求中使用的HTTP方法 GET 包含所有HTTP GET参数的类字典对象 POST 包含所有HTTP POST参数的类字典对象 REQUEST 该属性是POS

django之urls与视图函数views的简单学习

我们先了解一下urls和views分别是干嘛用的: urls: URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码 urls.py里面的基本格式如下: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 一般我们只会用到url里面

Django路由配置系统、视图函数

URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. ''' urlpatterns = [ url(正则表达式, views视图函数,参数,别名),] 参数说明: 一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 可选的要传递给视图函数的默认参数(字典形式) 一个可选的name参数 ''' 1.UR

第三百零五节,Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性

Django框架,Views(视图函数),也就是逻辑处理函数里的各种方法与属性 Views(视图函数)逻辑处理,最终是围绕着两个对象实现的 http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 之前我们用到的参数request就是HttpRequest     HttpRequest对象 逻辑处理函数的第一个形式参数,接收到的就是HttpRequest对象,这个对象里封装着用户的各种请求信息,通过

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

阅读目录(Content) 视图层之视图函数(views) 一个简单的视图 1.HttpRequest 2.HttpResponse 1.render 函数 2.redirect 函数 对比render与redirect: 回到顶部(go to top) 视图层之视图函数(views) 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以.

Django之views.py视图函数学习

视图函数: 视图函数时存在django项目中的应用程的一个名为views.py的文件模块: 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 一个简单的视图: 下面是一个以HTML文档的形式返回当前日期和时间的视图: views.py 1 from django.http import HttpResponse 2 3 import datetime 4 5 def current_datetime(request): 6 7 now =

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

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

排球记分员计分程序(六)————Views视图的编码与设计

一.Views视图的编码与设计 1.在上一步创建新的 DuiWuController控制器时,系统在Views\DuiWu文件夹中创建新的Create.cshtml. Delete.cshtml. Details.cshtml. Edit.cshtml和Index.cshtml 文件. 2.查看原来的Index.cshtml 文件,代码如下图所示: @model IEnumerable<排球计分程序.Models.DuiWu> @{    ViewBag.Title = "Index

django RESTful研究一第一个测试例子(用序列化器编写原生的Django视图函数)

让我们看看通过 Serializer 类怎样来编写 API 的视图函数,现在我们不会使用 REST 框架中的特性,仅仅写原生的Django视图函数. 一.我们创建一个 HttpResponse 的子类,用来将任何数据转换成 JSON格式. 编辑snippets/views.py,如下: from django.http import HttpResponse from django.views.decorators.csrf import csrf_exempt from rest_framew