• 六 .Django 视图views HttpResponse(二)


    一 . Django 视图 HttpResponse

    1.   http响应:HttpResponse对象

     对于HttpRequest对象来说,是由django自动创建的,但是,HttpResponse对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse对象。

                                               

    # resposon对象
    def showres(request):
        res=HttpResponse()
        print(res.content)  # 表示返回的内容
        print(res.charset)    # charset 编码格式
        print(res.status_code)    # 状态   200  304 404
        print(res.content-type)  # 指定输出MIME类型
        return  HttpResponse("response啊啦啦啦啦啊啦啦啦啦啦啦")

    服务器执行

    b''
    utf-8
    200
    b''

     

     设置或删除响应头信息

    response = HttpResponse()
    response['Content-Type'] = 'text/html; charset=UTF-8'
    del response['Content-Type']

    2. render()和 render_to_response()渲染

    页面渲染:          render()(推荐)
                      render_to_response(),

    def my_view(request):
        # 视图的代码写在这里
        return render(request, 'myapp/index.html', {'foo': 'bar'})

    上面的代码等于:
    from
    django.http import HttpResponse from django.template import loader def my_view(request): # 视图代码写在这里 t = loader.get_template('myapp/index.html') c = {'foo': 'bar'} return HttpResponse(t.render(c, request))
    def test(request):
       return render_to_response("html_app/01.html")
    
    

    locals():    可以直接将函数中所有的变量传给模板

    def login(request):
          bb="张三!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
          return render(request,"html_app/04login.html",{"name":bb})
          # return render(request,"html_app/04login.html",locals())

    return render(request, 'template.html', locals()|{'key1':value1,'key2':value2,})  # 通过render向模板中传值 1.locals()  2.字典 {'key1':value1,'key2':value2,...}

    3. redirect() 重定向

    redirect()跳转时,会更改浏览器的url地址
    参数可以是:
    
    一个模型:将调用模型的get_absolute_url() 函数
    一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
    一个绝对的或相对的URL,将原封不动的作为重定向的位置。
    默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。
    传递一个对象(ORM相关)

    from
    django.shortcuts import redirect def my_view(request): ... object = MyModel.objects.get(...) return redirect(object)
    传递一个视图的名称

    def
    my_view(request): ... return redirect('some-view-name', foo='bar')
    传递要重定向到的一个具体的网址
    
    def my_view(request):
        ...
        return redirect('/some/url/')
       return redirect('http://example.com/')
    默认情况下,redirect() 返回一个临时重定向。以上所有的形式都接收一个permanent 参数;如果设置为True,将返回一个永久的重定向:
    
    def my_view(request):
        ...
        object = MyModel.objects.get(...)
        return redirect(object, permanent=True)  永久重定向 爬虫相关的
    扩展阅读: 
    
    临时重定向(响应状态码:302)和永久重定向(响应状态码:301)对普通用户来说是没什么区别的,它主要面向的是搜索引擎的机器人。
    
    A页面临时重定向到B页面,那搜索引擎收录的就是A页面。
    
    A页面永久重定向到B页面,那搜索引擎收录的就是B页面。

     4. JsonResponse对象

    用 json 模块和 HttpResponse 返回生成的 json
    views
    
    from django.shortcuts import render, HttpResponse
    import json
     
    # json 测试
    def json_test(request):
        data = {"name": "Jack", "age": 18}
        hobby = ["Music", "Movie", "Basketball", "Reading"] 
        json_data = json.dumps(data)       # 把 data 序列化成 json 格式的字符串
        # json_data = json.dumps(hobby)  # 该方法也可以直接序列化列表
        return HttpResponse(json_data)
    
    
    JsonResponse 是 HttpResponse 的子类,用来生成 json 编码的响应
    views

    from
    django.shortcuts import render, HttpResponse # json 测试 def json_test(request): data = {"name": "Jack", "age": 18} hobby = ["Music", "Movie", "Basketball", "Reading"] # 这里需要导入 HttpResponse from django.http import HttpResponse, JsonResponse return JsonResponse(data)


    需要加个 safe=False
    from django.shortcuts import render, HttpResponse
     
    # json 测试
    def json_test(request):
        data = {"name": "Jack", "age": 18}
        hobby = ["Music", "Movie", "Basketball", "Reading"]
         
        from django.http import HttpResponse, JsonResponse
        return JsonResponse(hobby, safe=False)
    
    
    
    
    
  • 相关阅读:
    RTMP协议Web直播点播系统EasyDSS视频平台解决无法获取指定时间快照问题
    在线教育web无插件点播平台EasyDSS在上传部分点播文件出现无法观看问题如何修复?
    RTMP协议Web直播点播服务平台EasyDSS增加获取录像指定时间的m3u8播放地址
    RTMP协议视频平台EasyDSS编译过程中Go语言异步信息处理设计与实现
    在线课堂web无插件直播点播平台EasyDSS播放指定时间段的录像报404是什么原因?
    推流直播如何通过EasyDSS推流将内网EasyGBS视频流推到公网直播间进行直播?
    RTMP协议视频平台EasyDSS开发中如何通过Go语言 gorm 框架钩子函数精简代码?
    POJ1740 A New Stone Game 博弈论基础题 男人8题
    HDU1847 博弈论 水题
    POJ 2763 Housewife Wind LCA基础题
  • 原文地址:https://www.cnblogs.com/lovershowtime/p/11349551.html
Copyright © 2020-2023  润新知