django_day04

路由

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

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

  2. 分组

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

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

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

    1. url(r'^blogs/(?P<name>\d{4})/\d{2}$', views.blogs),
    2. url(r'^blogs/(?P<year>\d{4})/\d{2}$', views.blogs),
    3. url地址上捕获的参数会按照 关键字传参 方式传递给视图views里面的函数
    4. 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的命名和反向解析

    静态路由

    命名:

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

    反向解析:

    模板

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

    py:

    from django.shortcuts import reverse

    from django.urls import reverse

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

    分组

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

    反向解析:

    模板

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

    py

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

    命名分组

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

    反向解析:

    模板

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

    py

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

    namespace

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

    反向解析

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

    orm

    常用的字段

    1. AutoField(Field)
    2. - int自增列,必须填入参数 primary_key=True
    3. BigAutoField(AutoField)
    4. - bigint自增列,必须填入参数 primary_key=True
    5. 注:当model中如果没有自增列,则自动会创建一个列名为id的列
    6. from django.db import models
    7. class UserInfo(models.Model):
    8. # 自动创建一个列名为id的且为自增的整数列
    9. username = models.CharField(max_length=32)
    10. class Group(models.Model):
    11. # 自定义自增列
    12. nid = models.AutoField(primary_key=True)
    13. name = models.CharField(max_length=32)
    14. SmallIntegerField(IntegerField):
    15. - 小整数 -32768 32767
    16. PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    17. - 正小整数 0 32767
    18. IntegerField(Field)
    19. - 整数列(有符号的) -2147483648 2147483647
    20. PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    21. - 正整数 0 2147483647
    22. BigIntegerField(IntegerField):
    23. - 长整型(有符号的) -9223372036854775808 9223372036854775807
    24. BooleanField(Field)
    25. - 布尔值类型
    26. NullBooleanField(Field):
    27. - 可以为空的布尔值
    28. CharField(Field)
    29. - 字符类型
    30. - 必须提供max_length参数, max_length表示字符长度
    31. TextField(Field)
    32. - 文本类型
    33. EmailField(CharField):
    34. - 字符串类型,Django Admin以及ModelForm中提供验证机制
    35. IPAddressField(Field)
    36. - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
    37. GenericIPAddressField(Field)
    38. - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4Ipv6
    39. - 参数:
    40. protocol,用于指定Ipv4Ipv6 'both',"ipv4","ipv6"
    41. unpack_ipv4 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
    42. URLField(CharField)
    43. - 字符串类型,Django Admin以及ModelForm中提供验证 URL
    44. SlugField(CharField)
    45. - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
    46. CommaSeparatedIntegerField(CharField)
    47. - 字符串类型,格式必须为逗号分割的数字
    48. UUIDField(Field)
    49. - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
    50. FilePathField(Field)
    51. - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
    52. - 参数:
    53. path, 文件夹路径
    54. match=None, 正则匹配
    55. recursive=False, 递归下面的文件夹
    56. allow_files=True, 允许文件
    57. allow_folders=False, 允许文件夹
    58. FileField(Field)
    59. - 字符串,路径保存在数据库,文件上传到指定目录
    60. - 参数:
    61. upload_to = "" 上传文件的保存路径
    62. storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
    63. ImageField(FileField)
    64. - 字符串,路径保存在数据库,文件上传到指定目录
    65. - 参数:
    66. upload_to = "" 上传文件的保存路径
    67. storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
    68. width_field=None, 上传图片的高度保存的数据库字段名(字符串)
    69. height_field=None 上传图片的宽度保存的数据库字段名(字符串)
    70. DateTimeField(DateField)
    71. - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
    72. DateField(DateTimeCheckMixin, Field)
    73. - 日期格式 YYYY-MM-DD
    74. TimeField(DateTimeCheckMixin, Field)
    75. - 时间格式 HH:MM[:ss[.uuuuuu]]
    76. DurationField(Field)
    77. - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
    78. FloatField(Field)
    79. - 浮点型
    80. DecimalField(Field)
    81. - 10进制小数
    82. - 参数:
    83. max_digits,小数总长度
    84. decimal_places,小数位长度
    85. BinaryField(Field)
    86. - 二进制类型
    87. 字段类型

    自定义一个char类型字段:

    1. class MyCharField(models.Field):
    2. """
    3. 自定义的char类型的字段类
    4. """
    5. def __init__(self, max_length, *args, **kwargs):
    6. self.max_length = max_length
    7. super(MyCharField, self).__init__(max_length=max_length, *args, **kwargs)
    8. def db_type(self, connection):
    9. """
    10. 限定生成数据库表的字段类型为char,长度为max_length指定的值
    11. """
    12. return 'char(%s)' % self.max_length

    字段参数

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

    表的参数

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

    使用django的admin

    1. 创建一个超级用户

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

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

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

    必知必会13条

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

django_day04的更多相关文章

随机推荐

  1. JS:object

    object:对象 1.对象是拥有属性和方法的数据,也是一个变量,但值有多个,以key-value的形式. 2.对象有继承属性: 每当创建一个对象,对象里面就会有一个原型对象prototype,可以从 ...

  2. SpringBoot整合SpringSecurityOauth2实现鉴权-动态权限

    写在前面 思考:为什么需要鉴权呢? 系统开发好上线后,API接口会暴露在互联网上会存在一定的安全风险,例如:爬虫.恶意访问等.因此,我们需要对非开放API接口进行用户鉴权,鉴权通过之后再允许调用. 准 ...

  3. 手把手教学~基于element封装tree树状下拉框

    在日常项目开发中,树状下拉框的需求还是比较常见的,但是element并没有这种组件以供使用.在这里,小编就基于element如何封装一个树状下拉框做个详细的介绍. 通过这篇文章,你可以了解学习到一个树 ...

  4. 使用 Abp.Zero 搭建第三方登录模块(一):原理篇

    ​第三方登录是基于用户在第三方平台上(如微信,QQ, 百度)已有的账号来快速完成系统的登录.注册-登录等功能. 微信的鉴权 以微信的鉴权为例: 假如你的网站有一个扫码登录的功能,会弹出一个由微信提供的 ...

  5. 从UI Designer上面动态创建下拉列表

    在UI Desigher上创建一个新的列表 并创建2个值,code 和value 添加一个EventHandler 在EventHandler上面添加一个Operation 类型为script$dat ...

  6. labview从入门到出家1--第一个加法程序

    概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...

  7. 实战模拟│单点登录 SSO 的实现

    目录 什么是单点登录 单点登录的凭证 父域 Cookie 方式 用户认证中心方式 localstorage方式 什么是单点登录 单点登录: SSO(Single Sign On) 用户只需登录一次,就 ...

  8. C++数据类型的引入

    1.存储位数 计算机管理存储器(内存和外存)的最小单位是字节,每个字节存储一个8为二进制数.一个字节的存储范围就在(00000000 ~ 11111111),十进制表示就是0~255这个范围.为了方便 ...

  9. 01. MySQL__数据库分类和介绍

    数据库的分类 1. 关系型数据库 以表为数据库存储数据的单位,关系型数据库是经过数学理论验证可以保存现实生活中任何关系型的数据 2. 非关系型数据库 主要应用在一些特定场景,解决某些具体问题比如解决高 ...

  10. Solution -「原创」Destiny

    题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...