zoukankan      html  css  js  c++  java
  • django框架(View)

    -------------------URLconf-------------------
    1、设置
    1、在settings.py文件中通过ROOT_URLCONF指定根级url的配置

    2、urlpatterns是一个url()实例的列表

    3、一个url()对象包括:
    正则表达式
    视图函数
    名称name

    4、编写URLconf的注意:
    1、若要从url中捕获一个值,需要在它周围设置一对圆括号
    2、不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/'
    3、每个正则表达式前面的r表示字符串不转义

    5、请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post请求的参数及域名

    6、正则表达式非命名组,通过位置参数传递给视图
    url(r'^([0-9]+)/$', views.detail, name='detail'),

    7、正则表达式命名组,通过关键字参数传递给视图,本例中关键字参数为id
    url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'),

    8、参数匹配规则:优先使用命名参数,如果没有命名参数则使用位置参数

    9、每个捕获的参数都作为一个普通的python字符串传递给视图

    10、性能:urlpatterns中的每个正则表达式在第一次访问它们时被编译,这使得系统相当快


    2、包含其他的URLconfs
    1、在应用中创建urls.py文件,定义本应用中的urlconf,再在项目的settings中使用include()
    1、示例:
    from django.conf.urls import include, url
    urlpatterns = [
    url(r'^', include('booktest.urls', namespace='booktest')),
    ]

    2、匹配过程:先与主URLconf匹配,成功后再用剩余的部分与应用中的URLconf匹配


    3、URL的反向解析
    1、如果在视图、模板中使用硬编码的链接,在urlconf发生改变时,维护是一件非常麻烦的事情

    2、解决:在做链接时,通过指向urlconf的名称,动态生成链接地址

    3、视图:使用django.core.urlresolvers.reverse()函数
    return redirect(reverse('main:index'))

    4、模板:使用url模板标签
    {% url "main:index" 参数 %}


    -------------------定义视图-------------------
    1、概念
    1、本质就是一个函数

    2、视图的参数
    1、一个HttpRequest实例
    2、通过正则表达式组获取的位置参数
    3、通过正则表达式组获得的关键字参数

    3、在应用目录下默认有views.py文件,一般视图都定义在这个文件中

    4、如果处理功能过多,可以将函数定义到不同的py文件中


    2、错误视图
    1、概念:
    Django原生自带几个默认视图用于处理HTTP错误

    2、404 (page not found) 视图
    1、defaults.page_not_found(request, template_name='404.html')
    2、默认的404视图将传递一个变量给模板:request_path,它是导致错误的URL
    3、如果Django在检测URLconf中的每个正则表达式后没有找到匹配的内容也将调用404视图
    4、如果在settings中DEBUG设置为True,那么将永远不会调用404视图,而是显示URLconf 并带有一些调试信息
    在templates中创建404.html

    3、500 (server error) 视图
    1、defaults.server_error(request, template_name='500.html')
    2、在视图代码中出现运行时错误
    3、默认的500视图不会传递变量给500.html模板
    4、如果在settings中DEBUG设置为True,那么将永远不会调用505视图,而是显示URLconf 并带有一些调试信息

    4、400 (bad request) 视图
    1、defaults.bad_request(request, template_name='400.html')
    2、错误来自客户端的操作
    3、当用户进行的操作在安全方面可疑的时候,例如篡改会话cookie


    -------------------HttpReqeust对象-------------------
    1、概念
    1、服务器接收到http协议的请求后,会根据报文创建HttpRequest对象

    2、视图函数的第一个参数是HttpRequest对象

    3、在django.http模块中定义了HttpRequest对象的API


    2、属性
    1、path:一个字符串,表示请求的页面的完整路径,不包含域名

    2、method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'

    3、encoding:一个字符串,表示提交的数据的编码方式
    1、如果为None则表示使用浏览器的默认设置,一般为utf-8
    2、这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值

    4、GET:一个类似于字典的对象,包含get请求方式的所有参数,一般与url请求地址中的参数对应

    5、POST:一个类似于字典的对象,包含post请求方式的所有参数,一般与表单中的控件对应,但是不包含上传文件信息

    6、FILES:一个类似于字典的对象,包含所有的上传文件,详细内容见“上传文件”

    7、COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串

    8、session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见“状态保持”


    3、方法
    1、is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True

    4、QueryDict对象
    在属性中提到了类字典字型,这个类型就是QueryDict,定义在django.http.QueryDict
    QueryDict对象用来处理同一个键带有多个值的情况


    -------------------HttpResponse对象-------------------
    1、概念
    1、在django.http模块中定义了HttpResponse对象的API

    2、HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建

    3、不调用模板,直接返回数据
    from django.http import HttpResponse

    def index(request):
    return HttpResponse('你好')

    4、调用模板
    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))


    2、属性
    1、content:表示返回的内容,字符串类型

    2、charset:表示response采用的编码字符集,字符串类型

    3、status_code:响应的HTTP响应状态码

    4、content-type:指定输出的MIME类型


    3、方法
    1、init :使用页内容实例化HttpResponse对象

    2、write(content):以文件的方式写

    3、flush():以文件的方式输出缓存区

    4、set_cookie(key, value='', max_age=None, expires=None):设置Cookie
    1、key、value都是字符串类型
    2、max_age是一个整数,表示在指定秒数后过期
    3、expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerializer时才可序列化
    4、max_age与expires二选一
    5、如果不指定过期时间,则两个星期后过期

    5、delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生


    4、子类HttpResponseRedirect
    1、重定向,服务器端跳转

    2、构造函数的第一个参数用来指定重定向的地址


    5、子类JsonResponse
    1、返回json数据,一般用于异步请求

    2、_init _(data)

    3、帮助用户创建JSON编码的响应

    4、参数data是字典对象

    5、JsonResponse的默认Content-Type为application/json


    -------------------简写函数-------------------
    1、render
    1、render(request, template_name[, context])

    2、结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象

    3、request:该request用于生成response

    4、template_name:要使用的模板的完整名称

    5、context:添加到模板上下文的一个字典,视图将在渲染模板之前调用它

    6、示例
    from django.shortcuts import render

    def index(request):
    return render(request, 'booktest/index.html', {'h1': 'hello'})


    2、重定向
    1、redirect(to)

    2、为传递进来的参数返回HttpResponseRedirect

    3、to推荐使用反向解析

    4、示例
    from django.shortcuts import redirect
    from django.core.urlresolvers import reverse

    def index(request):
    return redirect(reverse('booktest:index2'))


    -------------------状态保持-------------------
    1、概念
    1、http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态

    2、客户端与服务器端的一次通信,就是一次会话

    3、实现状态保持的方式:在客户端或服务器端存储与会话有关的数据

    4、存储方式包括cookie、session,会话一般指session对象

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

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

    7、状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

    8、注意:不同的请求者之间不会共享这个数据,与请求者一一对应


    2、启用session
    1、使用django-admin startproject创建的项目默认启用

    2、在settings.py文件中


    3、使用session
    1、启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象

    2、get(key, default=None):根据键获取会话的值

    3、clear():清除所有会话

    4、flush():删除当前的会话数据并删除会话的Cookie

    5、del request.session['member_id']:删除会话

    6、配置url

    4、会话过期时间
    1、set_expiry(value):设置会话的超时时间
    def login_handle(request):
    request.session['uname'] = request.POST['uname']
    # request.session.set_expiry(10)
    # request.session.set_expiry(timedelta(days=5))
    # request.session.set_expiry(0)
    # request.session.set_expiry(None)
    return redirect(reverse('main:index'))

    2、如果没有指定,则两个星期后过期

    3、如果value是一个整数,会话将在values秒没有活动后过期

    4、若果value是一个imedelta对象,会话将在当前时间加上这个指定的日期/时间过期

    5、如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期

    6、如果value为None,那么会话永不过期

    5、存储session
    1、使用存储会话的方式,可以使用settings.py的SESSION_ENGINE项指定

    2、基于数据库的会话:这是django默认的会话存储方式,需要添加django.contrib.sessions到的INSTALLED_APPS设置中,运行manage.py migrate在数据库中安装会话表,可显示指定为:
    SESSION_ENGINE='django.contrib.sessions.backends.db'

    3、基于缓存的会话:只存在本地内在中,如果丢失则不能找回,比数据库的方式读写更快:
    SESSION_ENGINE='django.contrib.sessions.backends.cache'

    4、可以将缓存和数据库同时使用:优先从本地缓存中获取,如果没有则从数据库中获取
    SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

    6、使用Redis缓存session
    1、修改settings中的配置
    SESSION_ENGINE = 'redis_sessions.session'
    SESSION_REDIS_HOST = 'localhost'
    SESSION_REDIS_PORT = 6379
    SESSION_REDIS_DB = 0
    SESSION_REDIS_PASSWORD = ''
    SESSION_REDIS_PREFIX = 'session'

    2、服务器的命令
    启动:sudo redis-server /etc/redis/redis.conf
    停止:sudo redis-server stop
    重启:sudo redis-server restart
    设置密码:redis.conf中的requirepass

    3、客户端的命令:
    keys *:查看所有的键
    get name:获取指定键的值
    del name:删除指定名称的键

  • 相关阅读:
    实例属性 类属性 实例域 类域
    研究数据集
    static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符
    accessor mothod mutator mothod 更改器方法 访问器方法 类的方法可以访问类的任何一个对象的私有域!
    上钻 下钻 切片 转轴 降采样
    识别会话
    Performance Tuning Using Linux Process Management Commands
    Secure Hash Algorithm 3
    grouped differently across partitions
    spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset
  • 原文地址:https://www.cnblogs.com/qingtianyu2015/p/6064070.html
Copyright © 2011-2022 走看看