zoukankan      html  css  js  c++  java
  • Django中的视图

    一、Django中的视图  

    CBV和FBV

    我们之前写过的都是基于函数的view,就叫FBV。还可以把view写成基于类的。

    1
    url(r'^add_publisher/',views.AddPublisher.as_view)

    在views里添加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from django.views import View
    class AddPublisher(View):
        def get(self, request):
            return render(request, 'add_publisher.html')
        def post(self,request):
            new_name =request.POST.get('publisher_name',None)
            if new_name:
                models.Publisher.objects.create(name=new_name)
            else:
                error_msg ="出版社名称不存在"
                return  render(request,'add_publisher.html',{'error':error_msg})

     

    
    

    Request对象

    请求相关的常用值

    • path_info     返回用户访问url,不包括域名
    • method        请求中使用的HTTP方法的字符串表示,全大写表示。
    • GET              包含所有HTTP  GET参数的类字典对象
    • POST           包含所有HTTP POST参数的类字典对象
    • body            请求体,byte类型 request.POST的数据就是从body里面提取到的

    2. request对象
    1. 之前学过的
    1. request.method --> 获取请求的方法(GET、POST等)
    2. request.GET --> 通常用来获取URL里面的参数  
    127.0.0.1:8000/edit_book/?id=1&name=yimi
    request.GET --> {"id":1, "name":"yimi"}
    request.GET.get("id")
    3. request.POST --> 用来获取POST提交过来的数据
    request.POST.get("book_name")
    2. 补充其他常用的:
    1. request.path_info --> 获取用户请求的路径(不包含IP和端口和URL参数)
    2. request.body  

    3. response
    基础必备三件套(求学要严谨)
    1. HttpResponse --> 返回字符串内容
    2. render --> 返回一个html页面  
    3. redirect --> 返回一个重定向(告诉浏览器再去访问另外的网址)

    4. JsonResponse

    三、Response对象

    与由Django自动创建的HttpRequest对象相比,HttpResponse对象是我们的职责范围了。我们写的每个视图都需要实例化,填充和返回一个HttpResponse。

      html文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>upload</title>
    </head>
    <body>
     
    <form action="/upload/" method="post" enctype="multipart/form-data">
        <input type="file" name="upload_file">
        <input type="submit" value="开始上传">
     
    </form>
    </body>
    </html>

     

    url(r'^upload/',views.upload)

    views文件

     下面def upload(request):

    if request.method =='POST':
            print(request.FILES) 
     下面是print request.FILES的值
    <MultiValueDict: {'upload_file': [<TemporaryUploadedFile: 02 python fullstack s10 day08 集合.avi (video/avi)>]}>
            print(request.FILES['upload_file'].name )  #拿到文件的名字
    python fullstack s10 day08 集合.avi
            file_name = request.FILES['upload_file'].name  #拿到文件的名字
            with open(file_name,'wb')as f:
                for chunk in  request.FILES['upload_file'].chunks():
                    f.write(chunk)
            return HttpResponse('上传OK')
    
        else:
            return render(request, 'upload_file.html')

    jason 

    url(r'^json_data/',views.json_test),
    def json_test(request):
        data ={'name':'小黑','age':19}
        import json
        data_str =json.dumps(data) #把data序列化成json格式的字符串
        return HttpResponse(data_str)

      

    def json_test(request):
        data ={'name':'小黑','age':19}
       data2 =[1,2,3,45,6,5]
        # import json
        # data_str =json.dumps(data) #把data序列化成json格式的字符串
        # return HttpResponse(data_str)
        from django.http import JsonResponse
        return JsonResponse(data2)   #这个代码会报错,因为只接受字典的 形式。
        return JsonResponse(data,safe =False)

    Django shortcut functions

    1
    url(r'^book/[0-9]{2,4}/$',views.book),

      

    1
    url(r'^book/([0-9]{2,4})/([a-zA-Z]{2})/$',views.book)

      

    1
    2
    3
    4
    def book(request,arg1,arg2):#传三个参数
        print('arg1:',arg1)
        print('arg2:',arg2)
        return HttpResponse('口哥说一个 ')

      

    案例分析

    # url(r'^publisher_del/',views.publisher_del),
        url(r'^publisher_del/[0-9]+',views.publisher_del),
    # def publisher_del(request):##只传一个参数
    #     del_id =request.GET.get('id')
    #     models.Publisher.objects.get(id=del_id).delete()
    #     print(111)
    #     return redirect('/publisher_list/')
    
    
    # URL分组匹配
    def publisher_del(request,del_id): #传两个参数
        models.Publisher.objects.get(id=del_id).delete()
        print(111)
        return redirect('/publisher_list/')

  • 相关阅读:
    在Vue.js中使用Stylus预处理器
    前端面试问题(JavaScript)
    前端面试问题(CSS3)
    前端面试问题(HTML5+Http+web)
    VUE2中文文档:组件基础篇
    VUE2中文文档:语法基础笔记
    transition动画效果初识(实例)
    Centos5.2升级openssh7.4p1
    解决python升级导致pip无法使用
    使用jenkins时因为脚本权限问题执行项目失败
  • 原文地址:https://www.cnblogs.com/chongdongxiaoyu/p/9019617.html
Copyright © 2011-2022 走看看