• 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 %}
    

      

  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/10065683.html
Copyright © 2020-2023  润新知