zoukankan      html  css  js  c++  java
  • Django(三)

    六、Django模版

      定义模版:

        变量:视图传递给模版的数据    {{ var }}

          注意:如果使用的变量不存在,则插入的是空字符串

          在模板中使用点语法:字典查询、属性或者方法、数字索引

          在模板中调用对象的方法:不能传递参数

        标签:{{ tag }}

          作用:在输出中创建文本、控制逻辑和循环

           
    1 comment:注释多行
    2 ifequal、ifnotequal:判断是否相等或者不相等
    3 inlude:加载模版并以标签内的参数渲染
    4 url:反向解析
    5 csrf-token:用于跨站请求伪造保护
    6 block、extends:用于模版的继承
    7 autoescape:用于HTML转义
    View Code

        过滤器:{{ var | 过滤器 }}

          作用:在变量被显示前修改它,但是不修改其本身

            
    1 lower:全部变成小写
    2 upper:全部变成大写
    3 join:过滤器可以传递参数,参数用引号引起来    {{列表|join:'#'}}
    4 default:如果一个变量没有被提供,或者值为false、空,可以使用默认值    {{ var|default:'good' }}
    5 date:根据给定格式转换日期为字符串    {{dateVal|date:'y-m-d}}
    6 escape:HTML转义
    View Code

        注释:

          单行注释:{#注释的内容#}

          多行注释:

            1 {% comment %}
            2     多行注释内容
            3 {% endcomment %}

      反向解析:

        工程urls.py文件中:url(r'^', include('myApp.urls', namespace='app')),

        app的urls.py文件中:app_name = 'myApp'    url(r'^good/(d+)/$',views.good, name='good'),

        index.html文件中:<a href="{% url 'app:good' 1 %}">链接</a>

      模版继承:

        作用:模版继承可以减少页面的内容的重复定义,实现页面的重用

        block标签:在父模版中预留区域,子模版去填充

        extends标签:继承模版,需要写在模版文件的第一行

      CSRF:

        跨站请求伪造:某些恶意的网站包含链接、表单、按钮、js利用登录用户在浏览器中认证,从而攻击服务

        防止CSRF:

          在settings.py文件中的MIDDLEWARE里增加'django.middleware.csrf.CsrfViewMiddleware',

          在表单文件中增加{% csrf_token %}

      验证码:

        作用:在用户注册、登录页面的时候使用,为了防止暴力请求,减轻服务器的压力,防止CSRF的一种方式

    七、Django高级扩展

      静态文件:CSS、js、图片、Json文件、字体文件等

      中间件:

        概述:一个轻量级、底层的插件,可以介入Django的请求和响应

        本质:一个python类

        方法:

          
    1 __init__():不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否启用该中间件
    2 process_request(self,request):在执行视图之前被调用(分配url匹配视图之前),每个请求上都会调用,返回None或者HttpResponse对象
    3 process_view(self,request,view_func,view_args,view_kwargs):调用视图之前执行,每个请求都会调用 返回None或者HttpResponse对象
    4 process_template_response(self,request,response):在视图刚好执行完后调用,每个请求都调用,返回None或者HttpResponse对象,使用render返回视图
    5 process_response(self,request,response):所有响应返回浏览器之前调用,每个请求都会调用,返回HttpResponse对象
    6 process_exception(self,request,exception):当视图抛出异常时调用,返回HttpResponse对象
    View Code

        中间件各方法执行位置:

          

        自定义中间件:

          在工程目录下创建middleware目录,并在其下创建myApp目录

        使用自定义中间件:

          配置settings.py文件

          在MIDDLEWARE中添加自定义中间件:'middleware.myApp.myMiddle.MyMiddle',

      上传图片:

        概述:文件上传时,文件数据存储在request.FILES属性中

        注意:form表单要上传文件时需要加enctype="multipart/form-data",上传文件必须是post请求

        存储路径:在static目录下创建upfile目录用于存储接收上传的文件

          配置settings.py文件:MDEIA_ROOT = os.path.join(BASE_DIR, r'staticupfile')

      富文本:

        pip3 install django-tinymce

        在站点中使用:

          配置settings.py文件:

            在INSTALLED_APPS中添加:'tinymce',    TINYMCE_DEFAULT_CONFIG = {'theme': 'advanced','width': 600,'height': 400,}

          创建一个模型类:

            from tinymce.models import HTMLField

            class Text(models.Model):

              str = HTMLField()

          配置站点:

            注册管理员用户:

              pyhton manage.py createsuperuser

              设置用户名、邮箱、密码

              pyhton manage.py runserver

      celery(分布式任务队列):

        celery:

          任务(task):本质是一个python函数,将耗时操作封装成一个函数

          队列(queue):将要执行的任务放队列里

          工人(worker):负责执行队列中的任务

          代理(broker):负责调度,在部署环境中使用redis

        安装:

          pip3 install celery

          pip3 install celery-with-redis

          pip3 install django-celery

        配置settings.py文件:

          INSTALLED_APPS:'djcelery',

          import djcelery

          djcelery.setup_loader()   # 初始化队列

          BROKER_URL = 'redis://:ccm@127.0.0.1:6379/0'   # 配置代理
          CELERY_IMPORTS = ('myApp.task',)  # 配置任务

        在应用目录下创建task.py文件

        迁移,生成celery需要的数据库表:python manage.py migrate

        在工程目录下的项目目录下创建celery.py文件

           
     1 from __future__ import absolute_import
     2 import os
     3 from celery import Celery
     4 from django.conf import settings
     5 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'whthas_home.settings')
     6 app = Celery('portal')
     7 app.config_from_object('django.conf:settings')
     8 app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
     9 @app.task(bind=True)
    10 def debug_task(self):
    11     print('Request: {0!r}'.format(self.request))
    View Code

        在工程目录下的项目目录下的__init__.py文件中添加:from .celery import app as celery_app

        

  • 相关阅读:
    [ZJOI2014]力
    [八省联考2018]劈配
    [APIO2007]动物园
    [九省联考2018]IIIDX
    [HAOI2015]树上染色
    [SHOI2008]堵塞的交通
    暑假第五周
    暑假第四周
    暑假第三周
    暑假第二周
  • 原文地址:https://www.cnblogs.com/ccmldl/p/9637073.html
Copyright © 2011-2022 走看看