一,django的url路由系统总结

  1,url(/index/,函数或者类)

  2,url(/index/(\d+), 函数或者类)

  3,url(/index/(?P<nid>\d+),函数或者类)

  4,url(/index/(?P<nid>\d+),name="root",函数或者类)

    (1) 在views.py文件中通过reverse()反转url

    (2) 在templates中的文件中引用{% url 'root' 1 %}

5,url(/crm/,include('app01.urls')进行路由分发

   6,默认值url(/index/,{'web':'root'},函数或者类)

    在views.py中定义函数 def  func(reqeust,web):return ...来接收web这个参数

7,命名空间

   (1)project.urls.py   

from djanogo.conf.urls import url,include

urlpatterns = [
url(r'^a/',include('app01.urls',namespace='author-polls')),
url(r'^b/',include('app01.urls',namespace='publisher-polls')),
]

   (2)app01.urls.py 

from django。conf.urls import url
from app01 import views app_name = 'app01'
urlpatterns = [
url(r'^(?P<pk>\d+/$',views.detail,name='detail')
]

  (3)app01.views.py

def detail(request,pk):
print(request.resolver_match)
return HttpResponse(pk)

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

  v = reverse('author-polls:detail',kwargs={'pk':11})

  {% url 'app01:detail' pk=12 pp=99 %}

 django 中的路由系统和其它语言的框架有所不同,在django中每个请求的url都要有一条路由映射,这样才能将请求交给对应的view中的函数去处理.其它大部分的WEB框架则是对一类的url请求做一条路由映射,从而使路由系统变得简洁

二,django的路由请求周期知识点

  (1)Form 表单提交,页面肯定刷新,整个流程为,提交form 表单,发送数据到到后台进行处理,然后等待后台处理完成返回数据,并跳转到其它页面

        用户提交请求到url.py文件中的url,url接收到请求后,匹配到后端的视图函数,并将数据发送到后端,后端将请求处理完成之后,或者直接返回字符串给用户(HttpRespose),或者通过render方法中的open函数打开相应的templates中的html文件,将其中的所有的变量进行替换,最终将html文件和数据都已字符串的形式发送给用户,或者用redirect('/index/')将另外一个请求已字符串的形式发送给用户,用户跳转到其它页面

(2)ajax 提交

  $.ajax({

      url:'/index/';
      data:{'k':'v','list':[1,2,3,4]}; #或者$(form对象).serilize() 已列表的形式获取整个form中的数据
type:'POST'; #向后台提交数据的方式
dataType:'JSON'; #以json形式向后台提交数据
traditional:true; #需要向后台发送列表时,必须以加这个参数
success: function(d) { #d 为形式参数,可以任意定义
            location.reload() #刷新整个页面
            location.href() #跳转到其它页面
}
})

三,django views知识点

  (1)views中的请求方法

def func(request):
request.POST
request.GET
request.FILES
request.getlist
request.method
request.path_info #获取当前的请求的url

(2)request.environ 封装了用户所有的请求头部信息

from django.core.handlers.wsgi import WSGIRequest
request.environ
request.environ['HTTP_USER_AGENT']

四,模板的继承

  1,在主模板中定义block {%  block title %}{% endblock %}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %} {% endblock %}</title>
<link rel="stylesheet" href="/static/commons.css" />
<style>
.pg-header{
height: 50px;
background-color: seashell;
color: green;
}
</style>
{% block css %} {% endblock %}
</head>
<body>
<div class="pg-header">小男孩管理</div>
<div>
<a>asdf</a>
<a id="">asdf</a>
<a>asdf</a>
<a>asdf</a>
<a>asdf</a>
</div>
<iframe src="/"></iframe>
</body>
</html>

  2,在子模板中引用block,一个html 只能继承一个模板,但可以有多个include

{% extends 'master.html' %}
{% block title %}用户管理{% endblock %}
{% block content %}
<h1>用户管理</h1>
<ul>
{% for i in u %}
<li>{{ i }}</li>
{% endfor %}
</ul> {% for i in u %}
{% include 'tag.html' %}
{% endfor %} {% endblock %} {% block css %}
<style>
body{
background-color: red;
}
</style>
{% endblock %} {% block js %}
<script></script>
{% endblock %}

3,模板中的自定义simple_tag

 (1)在app 中创建templatetags模板,且目录名称必须为这个名字

  (2)创建任意.py文件,如:xx.py

#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag
def my_simple_time(v1,v2,v3):
return v1 + v2 + v3 @register.simple_tag
def my_input(id,arg):
result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
return mark_safe(result)

(3)在使用自定义simple_tag的html文件中导入之前创建的xx.py文件名

{% load xx %}

(4)使用simple_tag

{% my_simple_time 1 2 3%}
{% my_input 'id_username' 'hide'%}

(5)在settings中配置当前的app,不然django无法找到自定义的simple_tag

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
)

4,自定义simple_tag 中的装饰器用法

  (1)@register.simple_tag 使用方法

{% my_simple_time 1 2 3%}     #my_simple为.py文件中的函数名,可以传多个参数,并且参数之间允许有空格

(2)@register.filter

{{"参数一"|处理函数名:"参数二"}}  #参数二只能有一个,如果需要传递两个参数,可以“参数二,参数三”,然后再后端函数中进行单独处理,
                   #应用场景在模板语言中的if判断中,例如{% if "参数一"|处理函数名:"参数二" %}

五,django Cookie

  1,获取Cookie  

request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间

  2,设置Cookie

rep = HttpResponse(...) 或 rep = render(request, ...)

rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)
参数:
key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

  3,由于Cookie保存在客户端电脑上,所以Javascript或者Jquery 都可以操作Cookie

<script src='/static/js/jquery.cookie.js'></script>
$.cookie("list_pager_num", 30,{ path: '/' });

最新文章

  1. ASP.NET Page对象各事件执行顺序(转)
  2. MATLAB - 练习程序,求灰度图像均值、最大、最小数值
  3. 修改NGINX版本名称为任意WEB SERVER
  4. Linux命令:head命令详解
  5. easyui tab 加载iframe 高度问题
  6. Objective-C Http常用API 同步请求与异步请求
  7. ftk学习记(消息框篇)
  8. LeetCode——ZigZag Conversion
  9. MySQL5.5编译安装以及Debug
  10. [Abp 源码分析]十五、自动审计记录
  11. org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manu
  12. Codeforces Round #494 (Div. 3) D. Coins and Queries(贪心
  13. [Database.System.Concepts(6th.Edition.2010)].Abraham.Silberschatz. Ch8学习笔记
  14. WPF简单数据绑定
  15. msf客户端渗透(十):社会工程学
  16. SQLServer 里面的 DDL,DML,DCL,TCL
  17. Netty服务器线程模型概览
  18. 20154312 曾林 Exp8 web基础
  19. MySqli 执行多条SQL语句
  20. spring boot2 基于百度云apiface实现人脸检测与认证2

热门文章

  1. 关于TableView上有一段留白的解决方法
  2. hdu2005第几天?
  3. prototype,__proto__,constructor
  4. 添加Silverlight应用到HTML
  5. acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)
  6. javascript格式化table标签内容
  7. nubia Z5 mini 小牛 黑砖qhsusb dload修复
  8. windows下用visual studio code 调试go代码
  9. css3 FlexBox 弹性布局
  10. ListView控件--2016年12月9日