zoukankan      html  css  js  c++  java
  • 3 View

    1. HttpResponse对象:返回数据

    from django.http import HttpResponse
    • 在django.http模块中定义了HttpResponse对象的API
    • HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建
    • 不调用模板,直接返回数据
    #coding=utf-8
    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse('你好')
    • 调用模板
    from django.http import HttpResponse
    from django.template import RequestContext, loader
    
    def index(request):
        t1 = loader.get_template('polls/index.html')
        context = RequestContext(request, {'h1': 'hello'})
        return HttpResponse(t1.render(context))

    属性

    • content:表示返回的内容,字符串类型
    • charset:表示response采用的编码字符集,字符串类型
    • status_code:响应的HTTP响应状态码
    • content-type:指定输出的MIME类型

    方法

    • init :使用页内容实例化HttpResponse对象
    • write(content):以文件的方式写
    • flush():以文件的方式输出缓存区
    • set_cookie(key, value='', max_age=None, expires=None):设置Cookie
      • key、value都是字符串类型
      • max_age是一个整数,表示在指定秒数后过期
      • expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerializer时才可序列化
      • max_age与expires二选一
      • 如果不指定过期时间,则两个星期后过期
    from django.http import HttpResponse
    from datetime import *
    
    def index(request):
        response = HttpResponse()
        if request.COOKIES.has_key('h1'):
            response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
        response.set_cookie('h1', '你好', 120)
        # response.set_cookie('h1', '你好', None, datetime(2016, 10, 31))
        return response
    • delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生

    2.Cookie

     浏览器存储的一段纯文本信息,键值对格式保存 的

    服务器端设置的,response传递到客户端的

    再次访问的时候放到request.head发送到服务器端

    由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
    Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
    客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
    服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
     Cookie的不可跨域名性
    
    很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?
    
    答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie

    (1)服务器设置cookie,通过response传递到浏览器

     

       (2)再次访问服务端,放在request传递过去

      (3)服务端接受cookie

     

    2.子类HttpResponseRedirect:重定向

    • 重定向,服务器端跳转
    • 构造函数的第一个参数用来指定重定向的地址

    在views1.py中
    from django.http import HttpResponse,HttpResponseRedirect
    def index(request):
        return HttpResponseRedirect('js/')
    def index2(request,id):
        return HttpResponse(id)
    
    
    在应用的urls.py中增加一个url对象
    url(r'^([0-9]+)/$', views1.index2, name='index2'),
    • 请求地址栏如图:

    请求地址栏

    • 请求结果的地址栏如图:

    请求地址栏

    • 推荐使用反向解析
    from django.core.urlresolvers import reverse
    
    def index(request):
        return HttpResponseRedirect(reverse('booktest:index2', args=(1,)))


    3.子类JsonResponse

    • 返回json数据,一般用于异步请求
    • _init _(data)
    • 帮助用户创建JSON编码的响应
    • 参数data是字典对象
    • JsonResponse的默认Content-Type为application/json
    from django.http import JsonResponse
    
    def index2(requeset):
        return JsonResponse({'list': 'abc'})

    4.简写函数:render,redirect

    render

    • render(request, template_name[, context])
    • 结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象
    • request:该request用于生成response
    • template_name:要使用的模板的完整名称
    • context:添加到模板上下文的一个字典,视图将在渲染模板之前调用它
    from django.shortcuts import render
    
    def index(request):
        return render(request, 'booktest/index.html', {'h1': 'hello'})

    重定向

    • redirect(to)
    • 为传递进来的参数返回HttpResponseRedirect
    • to推荐使用反向解析
    from django.shortcuts import redirect
    from django.core.urlresolvers import reverse
    
    def index(request):
        return redirect(reverse('booktest:index2'))

    得到对象或返回404

    • get_object_or_404(klass, args, *kwargs)
    • 通过模型管理器或查询集调用get()方法,如果没找到对象,不引发模型的DoesNotExist异常,而是引发Http404异常
    • klass:获取对象的模型类、Manager对象或QuerySet对象
    • **kwargs:查询的参数,格式应该可以被get()和filter()接受
    • 如果找到多个对象将引发MultipleObjectsReturned异常
    from django.shortcuts import *
    
    def detail(request, id):
        try:
            book = get_object_or_404(BookInfo, pk=id)
        except BookInfo.MultipleObjectsReturned:
            book = None
        return render(request, 'booktest/detail.html', {'book': book})
    
    
    将settings.py中的DEBUG改为False
    将请求地址输入2和100查看效果
    

    得到列表或返回404

    • get_list_or_404(klass, args, *kwargs)
    • klass:获取列表的一个Model、Manager或QuerySet实例
    • **kwargs:查寻的参数,格式应该可以被get()和filter()接受
    from django.shortcuts import *
    
    def index(request):
        # list = get_list_or_404(BookInfo, pk__lt=1)
        list = get_list_or_404(BookInfo, pk__lt=6)
        return render(request, 'booktest/index.html', {'list': list})
    
    
    将settings.py中的DEBUG改为False
  • 相关阅读:
    20155318 《网络攻防》Exp6 信息搜集与漏洞扫描
    20155318 《网络攻防》Exp5 MSF基础应用
    20155318 《网络攻防》Exp4 恶意代码分析
    20155318 《网络攻防》Exp3 免杀原理与实践
    20155318 《网络攻防》Exp2 后门原理与实践
    20155318 Exp1 PC平台逆向破解(5)M
    20155318 第十六周课堂实践——嵌入式基础
    2017-2018-2 20155309 南皓芯 Exp9 Web安全基础
    2017-2018-2 20155309南皓芯 Exp8 WEB基础实践
    2017-2018-2 20155309 南皓芯 Exp7 网络欺诈防范
  • 原文地址:https://www.cnblogs.com/venicid/p/8287844.html
Copyright © 2011-2022 走看看