博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习笔记第二十一周
阅读量:5313 次
发布时间:2019-06-14

本文共 7177 字,大约阅读时间需要 23 分钟。

目录:  

  

   1、URL

   2、Models

    - 操作

   3、Templates

    - html模板的使用

    - 自定义函数

   4、cookie和session

   5、分页(自定义分页)

   6、Form验证

 

内容:

  1、URL

   

    默认值:

urls.pyurl(r'^index/', views.index, {
'name': 'root'}),views.pydef index(request,name): print(name) return HttpResponse('ok')
View Code

 

     命名空间:

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

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

       备注:

      模板语言中需要{% 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 templatefrom django.utils.safestring import mark_saferegister = 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

$.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完成页面显示条目数功能:

          

    
    {% for item in li %}
  • {
    { item }}
  • {% endfor %} {
    { page_str }}
View Code
def user_list(request):    val = request.COOKIES.get('per_page_count')    val = int(val)  #该值必须为整数
View Code

 

        设置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
View Code

        - 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 innerfrom django import  viewsfrom 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 innerfrom django import  viewsfrom 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 innerfrom django import  viewsfrom 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验证

  

     

转载于:https://www.cnblogs.com/xiaopi-python/p/7190427.html

你可能感兴趣的文章
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
使用pager进行分页
查看>>
UVA - 1592 Database
查看>>
Fine Uploader文件上传组件
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Swagger简单介绍
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>