django地址解析和cookie

django地址解析和cookie

地址的逆向解析

  • urls 中include上加上 namespace 名字
  • urls app中的,加上name 名字标记

在html中写出

{{url 'namespace:name' parameter}}
    {%for x in books%}
	
	
  • {{x.btitle}}
  • {%endfor%}

    这种格式 降低了耦合,方便了维护

    前边已经有了’/‘ 所以这里不需要’/‘了

    关键字匹配

    urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^(?P<bid>[0-9]+)/$', views.detail, name='detail'),
    ]
    

    子查询

        book = BookInfo.objects.filter(pk=bid)[0]
        heros = book.heroinfo_set.all()
        return render(request, 'oneapp/detail.html', {'heros': heros})
    

    关键字匹配之后,view视图函数中的,形参必须是关键字名。

    404页面 等异常处理

    情况1请求地址不存在

    • 设置DEBUG = True
    • ALLOWED_HOSTS = [‘*’, ]
    • 写一个404.html 放到templates目录下

    注意.400.html 500.html 同样支持
    好奇源码在哪里修改??

    情况2view函数异常时候

    • raise异常
    • 重定向

    request对象

    比如请求原始数据如下
    GET /oneapp/?name=zhangsan&pwd=123 HTTP/1.1

    属性

    • request.path = /oneapp/
    • request.method = GET
    • request.encoding = None 如果是none是默认器默认设置, 一般为utf-8
    • request.GET = 是一个字段类型
    • POST:一个类似于字典的对象
    • FILES:一个类似于字典的对象,包含所有的上传文件
    • COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串
    • session:一个既可读又可写的类似于字典的对象,表示当前的会话
    • is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True 地址客服端请求是False

    关于COOKIES
    {'csrftoken': 'BGd4HNjoGco52OVkHdrm2WyBPqao5DQx', 'sessionid': 'u47wzigs0tydodg9tkwp6dl9ykkqi0a2'}

    response返回内容

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

    COOKIES

    cookie时间自己设置

    不同主机的cookie,存储到不同的区域中, 相互不能访问。在自己的主机域名内可以访问自己的同一个cookie数据

    使用cookie,所有数据存储在客户端,注意不要存储敏感信息

    如果没有cookies 我们可以在响应中,写入cookie, 可以设置时间。过期秒数, 或者过期日期。

    def index(request):
        response = HttpResponse()
        if request.COOKIES.has_key('h1'):
            response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
        response.set_cookie('h1', '我是e', 2)
        return response
    

    方法

    • flush 文件方式输出缓冲区??
    • write(content):以文件的方式写

    重定向

    在异常, 或者页面过期的时候使用

    方式1

    • 导入from django.http import HttpResponseRedirect
    • return HttpResponseRedirect(‘新的定向路径’)

    方式2

    • from django.core.urlresolvers import reverse
    • from django.shortcuts import redirect
    • return redirect(reverse(‘commons.views.invoice_return_index’, args=[]))
    • args中是需要的参数,也可以传入POST请求的数据, 字典形式

    JsonResponse

    JsonResponse的默认Content-Type为application/json
    所以返回时候, 浏览器解释为json类型

    from django.http import JsonResponse
    
    def index2(requeset):
        return JsonResponse({'list': 'abc'})
    

    session状态保持

    创建session_id等过程, django已经默认启动
    session_id存储在cookie中, 所以没有cookie也就没有了session的状态保持实现了

    项INSTALLED_APPS列表中添加:
    'django.contrib.sessions',
    
    项MIDDLEWARE_CLASSES列表中添加:
    'django.contrib.sessions.middleware.SessionMiddleware',
    

    推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id

    一次通话就分配一个session_id, 然后根据session_id去辨别角色

    使用session

    • 启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象 这一点和cookie类似
    • clear():清除所有会话, 只是删除
    • flush()
    本文总阅读量