django_day04

路由

from django.conf.urls import url
urlpatterns = [
url(正则表达式, views视图,参数,别名),
]
  1. 正则表达式

    r'^articles/2003/'
    
    ^ 表示以什么开头
    $ 以什么结尾
    \d \w {}
    [0-9]{4}
    [a-z0-9]
# 是否开启URL访问地址后面不为/跳转至带有/的路径的配置项
APPEND_SLASH=True
  1. Django settings.py配置文件中默认没有 APPEND_SLASH 这个参数,但 Django 默认这个参数为 APPEND_SLASH = True。 其作用就是自动在网址结尾加'/'。

  2. 分组

    url(r'^blogs/(\d{4})/\d{2}$', views.blogs),

    url地址上捕获的参数会按照 位置传参 方式传递给视图views里面的函数

    def blogs(request,year):
  3. 命名分组

    url(r'^blogs/(?P<name>\d{4})/\d{2}$', views.blogs),
    url(r'^blogs/(?P<year>\d{4})/\d{2}$', views.blogs),
    url地址上捕获的参数会按照 关键字传参 方式传递给视图views里面的函数
    def blogs(request,year):

    URLconf匹配的位置

    URLconf 在请求的URL 上查找,将它当做一个普通的Python 字符串。不包括GET和POST参数以及域名。

    例如,http://www.example.com/myapp/ 请求中,URLconf 将查找 /myapp/ 。

    在http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找 /myapp/ 。

    URLconf 不检查请求的方法。换句话讲,所有的请求方法 —— 同一个URL的POSTGETHEAD等等 —— 都将路由到相同的函数。

    url的命名和反向解析

    静态路由

    命名:

    url(r'^blog/$', views.blog,name='blog'),  # /app01/blog/    ——》 blog

    反向解析:

    模板

    {% url  'blog' %}    ——》 /app01/blog/

    py:

    from django.shortcuts import reverse

    from django.urls import reverse

    reverse('blog')  # ——》 /app01/blog/

    分组

    url(r'^blog/([0-9]{4})/(\d{2})/$', views.blogs,name='blogs'),

    反向解析:

    模板

    {% url 'blogs' '2020' '02' %}  ——》 /app01/blog/2020/02/

    py

    reverse('blogs',args=('2018','08')  ——》 /app01/blog/2018/08/

    命名分组

    url(r'^blog/([0-9]{4})/(\d{2})/$', views.blogs,name='blogs'),

    反向解析:

    模板

    {% url 'blogs' '2020' '02' %}  ——》 /app01/blog/2020/02/
    {% url 'blogs' month='02' year='2020' %} ——》 /app01/blog/2020/02/

    py

    reverse('blogs',args=('2018','08')  ——》 /app01/blog/2018/08/
    reverse('blogs',kwargs={'year': '2018', 'month': '12'}) ——》 /app01/blog/2018/12/

    namespace

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/', include('app01.urls', namespace='app01')),
    url(r'^app02/', include('app02.urls', namespace='app02')), ]

    反向解析

    reverse('namespace:name',args=('2018','08')  ——》 /app01/blog/2018/08/
    {% url namespace:name %}

    orm

    常用的字段

    AutoField(Field)
    - int自增列,必须填入参数 primary_key=True
    BigAutoField(AutoField)
    - bigint自增列,必须填入参数 primary_key=True
    注:当model中如果没有自增列,则自动会创建一个列名为id的列
    from django.db import models
    class UserInfo(models.Model):
    # 自动创建一个列名为id的且为自增的整数列
    username = models.CharField(max_length=32) class Group(models.Model):
    # 自定义自增列
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32) SmallIntegerField(IntegerField):
    - 小整数 -32768 ~ 32767 PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正小整数 0 ~ 32767 IntegerField(Field)
    - 整数列(有符号的) -2147483648 ~ 2147483647 PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正整数 0 ~ 2147483647 BigIntegerField(IntegerField):
    - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 BooleanField(Field)
    - 布尔值类型 NullBooleanField(Field):
    - 可以为空的布尔值 CharField(Field)
    - 字符类型
    - 必须提供max_length参数, max_length表示字符长度 TextField(Field)
    - 文本类型 EmailField(CharField):
    - 字符串类型,Django Admin以及ModelForm中提供验证机制 IPAddressField(Field)
    - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 GenericIPAddressField(Field)
    - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
    - 参数:
    protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
    unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both" URLField(CharField)
    - 字符串类型,Django Admin以及ModelForm中提供验证 URL SlugField(CharField)
    - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号) CommaSeparatedIntegerField(CharField)
    - 字符串类型,格式必须为逗号分割的数字 UUIDField(Field)
    - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field)
    - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
    - 参数:
    path, 文件夹路径
    match=None, 正则匹配
    recursive=False, 递归下面的文件夹
    allow_files=True, 允许文件
    allow_folders=False, 允许文件夹 FileField(Field)
    - 字符串,路径保存在数据库,文件上传到指定目录
    - 参数:
    upload_to = "" 上传文件的保存路径
    storage = None 存储组件,默认django.core.files.storage.FileSystemStorage ImageField(FileField)
    - 字符串,路径保存在数据库,文件上传到指定目录
    - 参数:
    upload_to = "" 上传文件的保存路径
    storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
    width_field=None, 上传图片的高度保存的数据库字段名(字符串)
    height_field=None 上传图片的宽度保存的数据库字段名(字符串) DateTimeField(DateField)
    - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] DateField(DateTimeCheckMixin, Field)
    - 日期格式 YYYY-MM-DD TimeField(DateTimeCheckMixin, Field)
    - 时间格式 HH:MM[:ss[.uuuuuu]] DurationField(Field)
    - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 FloatField(Field)
    - 浮点型 DecimalField(Field)
    - 10进制小数
    - 参数:
    max_digits,小数总长度
    decimal_places,小数位长度 BinaryField(Field)
    - 二进制类型 字段类型

    自定义一个char类型字段:

    class MyCharField(models.Field):
    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
    self.max_length = max_length
    super(MyCharField, self).__init__(max_length=max_length, *args, **kwargs) def db_type(self, connection):
    """
    限定生成数据库表的字段类型为char,长度为max_length指定的值
    """
    return 'char(%s)' % self.max_length

    字段参数

    null = True 该字段在数据库可以为空
    blank = True 允许用户for表单中可以为空
    db_column 数据库中字段的列名
    name = models.CharField(db_column='nick',max_length=32,blank=True,null=True) #char default 数据库中字段的默认值
    db_index 数据库中字段是否可以建立索引
    unique 数据库中字段是否可以建立唯一索引
    verbose_name Admin中显示的字段名称
    choices Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
    如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表 姐'),],default=1)

    表的参数

    from django.db import models
    
    # Create your models here.
    class Person(models.Model):
    pid = models.AutoField(primary_key=True)
    name = models.CharField(db_column='nick',max_length=32,blank=True,null=True) #char
    age = models.IntegerField()
    birth = models.DateTimeField(auto_now=True)# 新增数据是自动保存
    #auto_now_add=True 新增数据时自动保存当前的时间
    #auto_now=True 新增和编辑 数据时自动保存当前的时间 class Meta:
    # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
    db_table = "table_name" # admin中显示的表名称
    verbose_name = '个人信息' # verbose_name加s
    verbose_name_plural = '所有用户信息' # # 联合索引
    # index_together = [
    # ("name", "age"), # 应为两个存在的字段
    # ]
    #
    # # 联合唯一索引
    # unique_together = (("name", "age"),) # 应为两个存在的字段
    def __str__(self): return "{}-{}".format(self.name,self.age)

    使用django的admin

    1. 创建一个超级用户

      python manage.py createsuperuser
    2. 在app01中admin.py注册model

      from django.contrib import admin
      from app01 import models
      # Register your models here.
      admin.site.register(models.Person)
    3. 登录网站

      http://127.0.0.1:8000/admin 操作表即可

    必知必会13条

    <1> all():                 查询所有结果
    
    <2> get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
    
    <3> filter(**kwargs):      它包含了与所给筛选条件相匹配的对象
    
    <4> exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象
    
    <5> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 可以指定字段
    
    <6> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 可以指定字段
    
    <7> order_by(*field):      对查询结果排序 可以多字段排序
    
    <8> reverse():             对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。
    
    <9> distinct():            从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)
    
    <10> count():              返回数据库中匹配查询(QuerySet)的对象数量。
    
    <11> first():              返回第一条记录
    
    <12> last():               返回最后一条记录
    
    <13> exists():             如果QuerySet包含数据,就返回True,否则返回False

django_day04的更多相关文章

随机推荐

  1. 监控pos收银机

    1.打开pos收银机snmp功能 控制面板-->程序和功能-->启用或关闭windows功能→简单网络管理协议(SNMP) 2.配置snmp服务 控制面板-->管理工具-->服 ...

  2. JavaScript扩展原型链浅析

    前言 上文对原型和原型链做了一些简单的概念介绍和解析,本文将浅析一些原型链的扩展. javaScript原型和原型链 http://lewyon.xyz/prototype.html 扩展原型链 使用 ...

  3. 【数据库Mysql 查询当前时间,年月日】

    1.本年份 SELECT YEAR(now()) SELECT DATE_FORMAT(NOW(), '%Y') 2.本月份(例如:1.01.January) SELECT MONTH(now()) ...

  4. HDFS存储目录分析

    一.介绍 HDFS metadata以树状结构存储整个HDFS上的文件和目录,以及相应的权限.配额和副本因子(replication factor)等.本文基于Hadoop2.6版本介绍HDFS Na ...

  5. Halcon 条形码识别

    read_image (Image, 'C:/Users/HJ/Desktop/test_image/image.png') create_bar_code_model([], [], BarCode ...

  6. 线程池ThreadPoolExector核心ctl, execute, addWorker, reject源码分析

    线程池核心方法execute()解析: public void execute(Runnable command) {//#1 if (command == null) throw new NullP ...

  7. C++基本数据类型范围和区别(详细)

    一.基本类型的大小及范围的总结(以下所讲都是默认在32位操作系统下):字节:byte:位:bit.1.短整型short:所占内存大小:2byte=16bit:所能表示范围:-32768~32767:( ...

  8. CF1709A Three Doors 题解

    题意 有三扇门,每扇门都有一把钥匙与该门上的数字相对应,若数字一样就可以打开. 其中有两扇门后有钥匙,一扇门后为空. 现拥有一把钥匙 \(x\),给出三扇门后的钥匙(若为 \(0\) 即门后没有钥匙) ...

  9. Linux(Centos7) 实例搭建 FTP 服务

    本文以 CentOS 7.2 64位系统为例,使用 vsftpd 作为 FTP 服务端,FileZilla 作为客户端.指导您如何在 Linux 云服务器上搭建 FTP 服务. 操作步骤 安装 vsf ...

  10. AtCoder Beginner Contest 247 F - Cards // dp + 并查集

    原题链接:F - Cards (atcoder.jp) 题意: 给定N张牌,每张牌正反面各有一个数,所有牌的正面.反面分别构成大小为N的排列P,Q. 求有多少种摆放方式,使得N张牌朝上的数字构成一个1 ...