zoukankan      html  css  js  c++  java
  • Django 过滤器

     

    1.Django的命令:

    1. 下载

      1. pip install django==1.11.16

      2. pip install django==1.11.16 -i 源

    2. 创建项目

      1. django-admin startproject 项目名 

    3. 启动项目

      1. cd 项目目录下  找到manage.py

      2. python manage.py runserver  # 127.0.0.1:8000

      3. python manage.py runserver 80 # 127.0.0.1:80

      4. python manage.py runserver  0.0.0.0:80 # 0.0.0.0:80

    4. 创建一个APP

      1. python manage.py startapp  app名称

      2. 注册  

    5. 数据库迁移

      1. python manage.py makemigrations   # 在app下的migrations文件夹下记录 models的变更记录

      2. python manage.py migrate    # 将models的变更记录同步到数据库中

    2.Django的配置

    1. 注释一个CSRF的中间件    可以提交POST 

    2. databases 数据库

      1. ENGINE  :  mysql

      2. NAME : 数据库的名称

      3. HOST:主机的IP

      4. PORT:3306

      5. USER: 用户名

      6. PASSWORD: 密码

    3. 静态文件的配置

      1. STATIC_URL  = '/static/'   # 别名 

      2. STATICFILES_DIRS = [

        ​ os.path.join(BASE_DIR,'static')

        ]

    4. app

      1. INSTALLED_APPS = [

        ​ 'app01' ,

        ​ 'app01.apps.App01Config'

        ]

    5. TEMPLATES 模板相关的配置

      1. DIRS  [ os.path.join(BASE_DIR,'templates')]

    3.Django使用mysql数据库的流程:

    1. 创建一个mysql数据库

    2. 在settings中进行配置

      DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.mysql',
             'NAME': 'bookmanager',
             'HOST': '127.0.0.1',
             'PORT': 3306,
             'USER': 'root',
             'PASSWORD': '',

        }
      }
    3. 在与settings同级目录下的init的文件中写:


      import pymysql
      pymysql.install_as_MySQLdb()
    4. 在app下的models中写类(models.Model)


      class Publisher(models.Model):  # app01_publisher
         pid = models.AutoField(primary_key=True)  # pid 主键
         name = models.CharField(max_length=32, unique=True)  # 出版社名称

         def __str__(self):
             return self.name


      class Book(models.Model):
         title = models.CharField(max_length=32, unique=True)  # 书籍的名称
         publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE)  # 关联了出版社

         def __str__(self):
             return self.title


      class Author(models.Model):
         name = models.CharField(max_length=32, unique=True)  # 作者的名字
         books = models.ManyToManyField('Book')  # 表示作者和书籍 多对多的关系
         # books = models.ManyToManyField('Book', through='Author_book',) # 表示作者和书籍 多对多的关系

         def __str__(self):
             return self.name

      5.数据库迁移的命令

      1. python manage.py makemigrations   # 在app下的migrations文件夹下记录 models的变更记录

      2. python manage.py migrate    # 将models的变更记录同步到数据库中

    4.ORM的对应关系

    ​ 类     —— 》  表

    ​ 对象  ——》 记录(数据行)

    ​ 属性  ——》 字段

    5.ORM操作

    1. 查询

      1. models.Publisher.objects.all()      # 查询所有的数据   ——》 QuerySet   对象列表

      2. models.Publisher.objects.get()    # 获取满足条件的一个对象    ——》 单独的对象

      3. models.Publisher.objects.filter()   # 获取满足条件的所有对象  ——》对象列表

      4. models.Publisher.objects.all().order_by('id')   # 排序  —— 》 对象列表

      5. pub_obj.pk    ——》 主键

      6. pub_obj.name 

      7. 外键

        1. book_obj.publisher    ——》 关联的对象

        2. book_obj.publisher_id  ——》从book表中获取关联对象的ID

        3. book_obj.publisher.name    ——》 关联的对象的属性

      8. 多对多

        1. author_obj.books   ——》 管理对象

        2. author_obj.books.all()   ——》 关联的所有的对象  对象列表

        3. book_obj.author_set   ——》管理对象、

    2. 增加

      1. models.Publisher.objects.create(name='xxx')    ——》 对象

      2. 外键

        1. models.Book.objects.create(title='xxx',publisher=pub_obj)

        2. models.Book.objects.create(title='xxx',publisher_id=pub_obj.id)

      3. 多对多

        1. models.Author.objects.create(name='xxxx')  ——》 author_obj

        2. author_obj.books.set([多个要关联对象的id,])

        3. author_obj.books.set([多个要关联对象,])

    3. 删除

      1. models.Author.objects.get(id=1).delete()

      2. models.Author.objects.filter(id=1).delete()

    4. 修改

      1. pub_obj.name = 'new_xxxx'

      2. pub_obj.save()

      3. 外键

        1. book_obj.title = 'xxxx'

        2. book_obj.publisher = pub_obj  或者  book_obj.publisher_id = pub_obj .id

        3. book_obj.save()

      4. 多对多

        1. author_obj.name = 'new_name'  

        2. author_obj.save()

        3. author_obj.books.set([多个要关联对象,])   author_obj.books.set([多个要关联对象的id,])

    6.request

    1. request.method    ——》 请求方式    8 种    GET/POST

    2. request.GET           ——》 url上的参数  xxxx/?id=1&name=aelex   {}    [] request.GET.get('id')

    3. request.POST        ——》 form表单提交的POST的数据   {}    []  request.POST.get()

    7.函数的返回值

    1. HttpResponse('字符串') ——》  返回字符串

    2. render(request,'模板的文件名',{k1:v1})     ——》返回一个完整的页面

    3. redirect(''跳转的地址'')     ——》 重定向   响应头  Location : '跳转的地址'

     

    1.MVC和MTV
    1. MVC

    2. C  Controller  :  逻辑的控制 

    3. M Model     :     存取数据

    4. V View       :  信息的展示

    5. MTV

      1. M : model    ORM操作

      2. T:     Template   模板

      3. V:  View     业务逻辑

    2.变量

    {{ 变量 }}   使用.来获相关属性和方法

    3.过滤器

    语法: {{ value|filter_name:参数 }}   # 参数最多只有一个

    1. 内置过滤器

      1. default  提供默认值

        {{ kong|default:'nothing' }}  

      2. date  日期格式化


        {{ now|date:'Y-m-d H:i:s' }}

        settings中可配置全局的日期时间格式化
        USE_L10N = False
        DATETIME_FORMAT = 'Y-m-d H:i:s'
      3. safe 不进行转义


        {{ js|safe }}   # 告诉Django 前面的内容是安全的,不必转义
    2. 自定义filter

      1. 定义

        1. 在APP下创建一个叫templatetags的python包;  不能变的,必须是包,名字必须是templatetags

        2. 在包中创建一个py文件     my_filters;

        3. 在py文件中写代码


          from django import template
         
          register = template.Library()  # register的名字不能改
        1. 写函数


        @register.filter
        def add_dsb(value, arg):
           return "{}_{}".format(value, arg)
        1. 给定义的函数加装饰器


        @register.filter
        def add_dsb(value, arg):
      2. 使用

        在模板中使用:

        1. 导入定义的文件


          {% load my_filter %}
        1. 使用过滤器


        {{ name|add_dsb:'very_dsb' }}

    4.标签

    ​ {% csrf_token %}

    ​ 添加在form表单中   就可以提交POST请求

    5.母版和继承
    1. 母版

      就是一个普通的HTML文本,将多个页面公共部分的内容提取出来,在页面中定义多个block块


      {% block content %}
      {% endblock %}
      1. 继承

      在子页面中,继承母版  {% extends  'base.html'  %}

      可以重新书写block块中内容

      1. 注意事项


      2. {% extends 'base.html' %} 写在第一行,上面不写内容
      3. 要修改的 内容写在block块中,写在外面不显示

      4. {% extends 'base.html' %}  base.html 记得带上引号,不然当做变量去查找

      5. 定义多个block块,一般要定义上 css和js

    6.组件

    ​ 把多个页面公用的HTML代码放在一个HTML文件中    —— 》组件  nav.html

    ​ 使用:  {% include  ‘nav.html’  %}

    7.静态文件相关

    {% load static %}

    {% static  '静态文件相对路径' %}    ——》 获取到别名,跟后面的参数进行拼接

    {% get_static_prefix %}  ——》 获取到别名

    <link rel="stylesheet" href="{% get_static_prefix %}plugins/bootstrap-3.3.7/css/bootstrap.css">
    8.自定义inclusion_tag
    自定义inclusion_tag 返回HTML代码段
    pagenation.html组件文件中写
    <nav aria-label='Page navigation'>
    <ul class='pagination'>
    {% for foo in num%}
    {% if current==foo %}
    <li class='active'><a href='#'>{{ foo }}</a></li>
    {% else %}
    <li> <a href='#'>{{ foo }}</a></li>
    {% endif %}
    {% endfor%}
    </ul>
    </nav>
    在templatetags包中的my_filters文件中写
    @register.inclusion_tag('pagenation.html')
    def pagenation(num,current):
    return{'num':range(1,num+1),'current':current}
    在应用的HTML文件中
    {% load my_tags %}
    {% pagenation 5 1 %}
    

      

  • 相关阅读:
    NSURL 的简单实用
    动画demo
    UIScrollView的简单页面
    关于UITableview(更新)
    添加手势
    多线程
    IOS 瀑布流
    高低字节序转换(htonl、ntohl、htons、ntohs函数)
    Xcode个版本
    网址
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/10065683.html
Copyright © 2011-2022 走看看