目录:  

  

   1、URL

   2、Models

    - 操作

   3、Templates

    - html模板的使用

    - 自定义函数

   4、cookie和session

   5、分页(自定义分页)

   6、Form验证

内容:

  1、URL

   

    默认值:

urls.py

url(r'^index/', views.index, {'name': 'root'}),

views.py
def index(request,name):
print(name)
return HttpResponse('ok')

     命名空间:

         namespace是添加在name前面,和name结合一起生成URL的方法

#urls.py中
from django.conf.urls import url,include urlpatterns = [
url(r'^a/',include('app01.urls',namespace='author')),
] #app01的urls.py中
from django.conf.urls import url
from app01 import views
app_name = 'app01'
urlpatterns = [
url(r'^index/',views.index, name='index'),
]
#app01的views中
def index(request):
v = reverse('author:index')
print(v)
return HttpResponse('ok')

      备注:

      模板语言中需要{% url   'author:index' %}

    

      请求周期:

      url -> 路由->函数或者类-> 返回字符串或者模板语言

      Form表单提交:

        提交-> url->函数或者类中的方法处理,处理完毕后返回给用户:

          HttpReponse()或者render()或者redirect()无论哪种方法,最后提交给用户的都是已经处理过的页面

          用户看到的永远都是已经处理完成的界面,当接受到redirect时自动发起一个新的URL

    

      Ajax:

        $.ajax({

          url:'/index/',

          data:{'k':'v'},

          dataType: 'JSON',

          type: 'POST',

          traditional: true,

          success: function(data){

             location.reload()     #刷新

             locatin.href='某个地址' #跳转             

          }        

        })

        提交 -> url  -> 函数或者类中的方法

              HttpResponse()

              render(request, 'index.html',{'k':'v'})

        生成字符串返回给用户

   2、Views

    请求的其他信息

    

    

   3、Models

    - 操作

   3、Templates

    - html模板的使用

    a) 在模板中定义:

    {% block content %} {%  endblock %}

    b) 在其他html中:

    最上面定义:

    {% extends   ‘模板页名称’%}

    

    {% block content %}

    自定义内容

    {%  endblock %}

    备注:

    由于css和js每个网页有可能会修改,所以需要修改:

    1、在</style>下面写{% block css %}{% endblock%}

    2、在</script>下面写{% block js%}{% endblock%}

    这样在子版调用可以分别设置

    母版html类型:

    1、extends:  每个模板的继承,只能继承一个模板

    2、include:   {% include ‘tag-name’%}  #可以定义多个并可重复调用

    - 自定义函数(自定义simple tag) 自定义函数也是在模板里使用的方法

    simple_tag:

    a、在某个app里创建一个templatetags目录,名字不能改

    b、在这个目录下创建一个任意py文件

    c、在这个文件中导入:

from django import template
from django.utils.safestring import mark_safe register = template.Library()
@register.simple_tag

       d、创建函数: 

def func(a1,a2,a3...):
return 'abc'

       e、settings文件中注册APP

     f、html文件中顶部{% load  '该py文件' %}

      g、html引用{%  函数名   arg1   arg2  arg*  %}#使用时必须使用该方式调用

    filter:

    filter与simpe_tag比较:

    1、filter与simple_tag定义类似,所以a-b步骤一样,c步骤中@register.simple_tag需要改成@register.filter

     2、在html中调用,filter最多只能调用两个参数,同时方法为{{ ‘参数1’|函数名:'参数二' }}中间连空格都没法添加,或者{{ ‘参数1’|函数名:数字 }}形式

     3、filter可以在{%if  ‘参数1’|函数名:'参数二' %}{% endif%} filter可以作为if条件来操作

   4、cookie和session

    1、cookie:

      cookie是保存在用户浏览器的一个键值对,用来记录用户登录信息

    def login(request):

      当用户名密码核对成功后:

        res = redirect('/index/')#将跳转到index界面

        res.set_cookie('name': username) #设置cookie值

    def index(request):

      cookie = request.COOKIES.get('name') #获取cookie

      if not cookie:

        return redict(‘/login/’)#如何cookie没有获取到就要跳转会login界面

      return render(request,'index.html',{'current_name':  cookie}) #这样可以显示谁登录了

      

      cookie能提供的功能:

        从请求中获取cookie:cookie是已字典的形式存在

          1、request.COOKIE[‘username’]

          2、request.COOKE.get(‘username’)

        生成cookie:

         1、设置cookie,关闭浏览器就失效

          response.set_cookie(‘key’,'value')

         return response

        2、cookie参数:        

key,               键
value=‘’, 值
max_age=None, 超时时间
expires=None 超时时间(IE requires expires, so set it if hasnt;t been already)
path='/', cookie生效的路径,/表示根路径,特殊的:根路径cookie可以被任何url页面访问,如果写成别的路径,比如/index表示只能在index的url中使用
domain=None, cookie生效域名
secure=False https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

        由于cookie保存再客户端的电脑上,所以JavaScript和jquery也可以操作cookie

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

       例子:

          1、response.set_cookie(‘key’,'value',max_age=10)#设置cookie在10s后失效

          2、import datetime

            current_date = datetime.datetime.utcnow()

            current_date += datetime.timedelta(seconds=10)

            response.set_cookie(‘key’,'value',expires=current_date)                  

          3、response.set_cookie(‘user_type’,'abcabd',httponly=True)#设置后没法通过js抓取到该cookie

           4、juery-cookie:

            下载jquery-cookie.js文件:由于它是jquery的插件,用的时候必须放在jquery下面

            网址:plugins.jquery.com/cookie

            $.cookie('k1','v1') 设置值

            $.cookie('k1')       获取值

            $.cookie('k','v',{'path':})

          通过cookie完成页面显示条目数功能:

          

<body>
<ul>
{% for item in li %}
<li>{{ item }}</li>
{% endfor %}
{{ page_str }}
</ul>
<div>
<select id="ps" onchange="changePageSize(this)">
<option value="10">10</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</div>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
$(function () {
var v = $.cookie('per_page_count'); /* 页面重新加载后获取该值,然后让select的val加载该值*/
$('#ps').val(v)
})
function chanagePageSize(ths) {
var v = $(ths).val();
$.cookie('per_page_count',v,{path: '/user_list'})
location.reload()
}
</script>
</body>
def user_list(request):
val = request.COOKIES.get('per_page_count')
val = int(val) #该值必须为整数

        设置cookie可以使用密文设置:

        obj = HttpResponse('s')

        obj.set_signed_cookie('username','hahaha',salt='abcabcabd')  #设置cookie为密文

        获取cookie解密:

        request.get_signed_cookie('username',salt='abcabcabd')

    

      装饰器:

        - FBV:       

def auth(func):
def inner(*args,**kwargs):
v = request.COOKIES.get('usernmae')
if not v:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner @auth

        - CBV

def auth(func):
def inner(*args,**kwargs):
v = request.COOKIES.get('usernmae')
if not v:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner from django import views
from django.utils.decorators import method_decorator
class Order(views.View): @method_decorator(auth) #只对get方法做认证
def get(self,request):
pass def post(self,request):

只对get方法做认证

def auth(func):
def inner(*args,**kwargs):
v = request.COOKIES.get('usernmae')
if not v:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner from django import views
from django.utils.decorators import method_decorator
@method_decorator(auth,name='dispath')
class Order(views.View): def get(self,request):
pass def post(self,request):
pass

CBV装饰器方法一

def auth(func):
def inner(*args,**kwargs):
v = request.COOKIES.get('usernmae')
if not v:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner from django import views
from django.utils.decorators import method_decorator class Order(views.View): @method_decorator(auth)
def dispatch(self, request, *args, **kwargs):
return super(Order, self).dispatch(request,*args,**kwargs)
def get(self,request):
pass def post(self,request):
pass

CBV装饰器方法二

   5、分页(自定义分页)

     防止XSS攻击:默认情况下django只会认为后端传递过来的是字符串,所以html标记、js语言全部当做字符串来处理

      为了让django可以接受html或者js语言,可以使用:

      1、前端方法:使用filter: {{ str|safe }}  //通过safe在前端将html、js转换

      2、后端方法:引用 from django.utils.safestring import mark_safe,然后将自定义字符串通过mark_safe方法进行处理

            

   6、Form验证

  

     

Python学习笔记第二十一周的更多相关文章

  1. Python学习笔记第二十三周(Flask架构)

    目录: 一.变量引用 内容: 备注:PyCharm小技巧,comm+alt+l  自动修改格式,comm+alt+return  向上添加新行 一.变量引用 1.url生成 from flask im ...

  2. Python学习笔记第十一周

    目录: 1.RabbitMQ   2.Redis  内容: 1.RabbitMQ 实现简单的队列通信 send端 import pika credentials = pika.PlainCredent ...

  3. Python学习笔记第二十七周(Bootstrap)

    目录: 全局样式 一.栅格系统 二.表单 三.按钮  四.导航 五.按钮组 六.面板 七.表格 八.分页 九.排版 十.图片 十一.辅助类 十二.响应式工具 组件 内容: 前言: 首先通过https: ...

  4. Python学习笔记第二十周

    目录: 一.ORM 1.查询补充 备注:forloop.counter介绍 二.Ajax 三.ORM多对多操作 内容: 一.ORM 1.查询补充: 1.models.USR.objects.all() ...

  5. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  6. python学习笔记第二周

    目录 一.基础概念 1.模块 1)os模块 2)sys模块 2.pyc文件 3.数据类型 1)数字 2)布尔值 3)字符串 4.数据运算 5.运算符 6.赋值运算 7.逻辑运算 8.成员运算 9.身份 ...

  7. Python学习笔记第二十五周(Django补充)

    1.render_to_reponse() 不同于render,render_to_response()不用包含request,直接写template中文件 2.locals() 如果views文件中 ...

  8. Python学习笔记第二十六周(Django补充)

    一.基于jQuery的ajax实现(最底层方法:$.jax()) $.ajax( url: type:''POST“ ) $.get(url,[data],[callback],[type])  #c ...

  9. Python学习笔记第二十二周(前端知识点补充)

    目录: 一.伪类 二.样式 1.字体 2.背景图片 3.margin和padding 4.列表属性 5.float 6.clear 7.position 8.text-decoration(a标签下划 ...

随机推荐

  1. 如何引用GitHub的静态资源文件 js css

    参考:引用GitHub的静态资源文件 有些人说直接用 Github Raw 浏览器不执行是因为返回的 content-type 是 text/plain,这么说不准确.实际上浏览器对 MIME 类型并 ...

  2. Hadoop---Exception in thread "main" java.lang.NullPointerException问题的解决

    Exception in thread "main" java.lang.NullPointerException问题的解决 解决:  首先我们来分析下这个问题,我是使用debug ...

  3. IntelliJ IDEA下载及安装,破解

    IntelliJ IDEA下载及安装,破解 百度百科:IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助 ...

  4. 【九校联考-24凉心模拟】锻造(forging)

    题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打, 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现……自 己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他 ...

  5. oracle 如何查看当前用户的表空间名称

    如何查询当前用户的表空间名称?因为oracle建立索引,需要知道当前用户的表空间,查找了一下资料 --查询语法-- select default_tablespace from dba_users w ...

  6. stream.map示例

    引用1:https://blog.csdn.net/sanchan/article/details/70753645 引用2:https://www.ibm.com/developerworks/cn ...

  7. Linux第九周作业

    学习笔记 不同类型的进程有不同的调度需求,其中分为两类 第一类:I/O-bound(频繁进行I/O,花费长时间等待I/O操作的完成)CPU-bound(计算密集型,需要大量的CPU时间进行运算) 第二 ...

  8. Vue + Element UI 实现权限管理系统(更换皮肤主题)

    自定义主题 命令行主题工具 1.安装主题工具 首先安装「主题生成工具」,可以全局安装或者安装在当前项目下,推荐安装在项目里,方便别人 clone 项目时能直接安装依赖并启动. yarn add ele ...

  9. windows下《Go Web编程》之Go工作空间

    上篇已配置GOPATH工作空间为D:\mygo,之后练习就会在此目录进行... GOPATH目录下有3个子目录: src:存放源代码(.go .c .h .s等 ) pkg:编译后生成的文件(如.a) ...

  10. python 学习 面向对象编程

    面向对象编程---oop,是一种编程思想,oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行为了简化程序设计 ...