- 今日内容概要
- 数据库同步命令
- orm创建外键关系
- django请求生命周期流程图
- 分块具体学习所有的功能
- 路由层
- 路由 匹配
- 无名有名分组
- 反向解析
- 路由分发
- 名称空间
数据库同步命令
""" 数据库里面已经有一些表,我们如何通过django orm 操作 1、照着数据库表字段自己在models.py数据需要自己第二次同步 2、django提供的反向同步 """ 配置数据库文件 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db123', 'USER':'root', 'PASSWORD':'123', 'HOST':'127.0.0.1', 'PORT':3306, } } 在__init__下配置文件 import pymysql pymysql.install_as_mysqldb() models.py文件的配置 1、首先执行数据库迁移的命令 from django.db impoprt models tools run makemigrations migrate inspectdb 表名 将生城的代码赋值到models中 在加上 def__str__(self): return self.name 然后再 python Console中执行下列的命令即可 >>> from app01 import models >>> res = models.Userinfo.objects.all() >>>res
先完成数据库迁移的命令
python manage.py makemigrations
查看代码
python manage.py inspectdb
class Userinfo(models.Model): # id = models.IntegerField(blank=True, null=True) # name = models.CharField(max_length=32, blank=True, null=True) # pwd = models.IntegerField(blank=True, null=True) # # class Meta: # managed = False # db_table = 'userinfo' # def __str__(self): # return self.name
orm 创建外键关系
""" 1、表与表之间的关系 一对多 一对一 多对多 2、表关系的判断 换位思考 """ 创建外键 书籍表 出版社表 作者表 怎样使用orm创建新的表 class Book(models.Model): title = models.CharFild(max_length=32) price = models.Decimalfield(max_digits=8,decimal_places=2) #出版社外键 authors = models.Foreignkey(to='publish')#默认的主键 """自动在外键字段后面加——id后缀""" #作者外键 authors = models.ManyToManyField(to='Author') #自动帮你创建书籍和作者的第三章表 """虚拟字段不会再表中实例化出来 而是告诉ORM创建出第三张关系表""" class Publish(models.Model): title = models.CharFiled(max-lengh=32) email = models.EmailField() class Author(models.Model): name = models.CharField(max_lengh=32) age = models.IntergerFile() author_detail =models.OneToOneField(to='AuthorDetail') """自动再外键字段后面加——id 后缀""" class AuthorDetail(models.Model): phone = models.BigIntegerField() Addr = models.CharField(max_length=128)
"""
#针对外键字段的创建的位置
一对多
推荐建在多的一方
一对一
建在任何一方都可以 ,但是推荐建在查询频率较高的表中
多对多
1、自己建表
2、建在任何一方都可以 但是推荐建在查询频率较高的表中
"""
django请求生命周期流程图
路由层之路由匹配
"""路由你可以看成是除去ip 和 port之后的地址""" url(r'^admin/', admin.site.urls), 路由匹配 url(r ' test', view.test), #第一个参数其实是一个正则表达式 #一旦第一高参数匹配到了内容直接结束匹配 执行对应的视图函数 ######控制是否加斜杠再次请求 ######APPEND_SLASH = False #该参数默认就是true 一般情况下无需修改 url(r'testadd', views.testadd) 再进入试图函数中写两个视图函数 from django.shortcuts import render,HttpResponse def test(request): return HttpResponse ('from test') def testadd(request): return HttpResponse('from testadd')
为了防止再输入地址的时候一段乱输入也能输出结果后面需要加正则表达式限制它的输入要求
url(r'^test/(\d+)/$',views.test),
# url(r'^testadd/(?P<id>\d+)/$',views.testadd),
无名分组
url(r'^test/[0-9]{4}/$',views.test), 127.0.01:8000/test/1234/ url(r'^test/(\d+)/$',views.test), 127.0.01:8000/test/1234456654324/ #正则表达式分组 ;给正则表达式前后加一个小括号 将括号内正则表达式匹配到的内容当作位置参数传递给后面的视图函数 url z(r'test/(\d+)/$',views.test) 127.0.01:8000/test/1234456654324/
有名分组
url(r'^test2/(?P<id>\d+)/(?P<id1>\d+)/$',views.test2)
"""
有名分组
将括号内正则表达式匹配到的内容当作关键字参数传递给后面的视图函数
"""
是否可以结合使用
前提
1、无名有名不能混合使用
2、有名和无名可以单个重复使用
url(r'^test2/(?P<id>\d+)/(?P<id1>\d+)/$',views.test2)
反向解析
url(r'^index/(?P<id>\d+)/',views.index,name='index_name'), url(r'^home/',views.home),
真的式
当路由频繁变化的时候,html界面上的来你须得地址如何做到动态的解析
1、给路由与视图函数对应关系添加一个别名(名字自己指定 ,只要不冲突即可)
2、根据该别名动态的解析出一个结果,该结果可以直接访问到对应的路由
url(r'^index/(?P<id>\d+)/',views.index,name='index_name'),
无名有名反向解析
无名解析
后端
前端
有名分组的反向解析