反向同步,orm创建外键关系,django请求生命周期流程图,路由匹配,无名有名分组与反向解析

数据库同步命令

'''
数据库里面已经有一些表 如何通过django orm操作?
1.照着数据库表字段自己在models.py
数据需要自己二次同步
2.django提供的反向同步
'''
1.先执行数据库迁移命令 完成连接
python manage.py makemigrations
2.查看代码
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'

orm创建外键关系

'''
1.表与表之间的关系
一对多
一对一
多对多
2.表关系的判断
换位思考
'''
书籍表 出版社表 作者表 作者详情表
# orm针对外键字段的创建位置
一对多
  创建在多的一方
   一对一
  创建在查询频率较高的表中
   多对多
  创建在第三张表中
1.class Book(models.Model):
   title=models.CharField(max_length=32)
   price=models.DecimalField(max_digits=8,decimal_places=2)
   # 出版社外键
   publish=models.Foreignkey(to='Publish')  # 默认是Publish表的主键
   '''自动在外键字段后面加_id后缀'''
   # 作者外键(多对多)
   authors=models.ManyToManyField(to='Author')  # 自动创建书籍和作者的第三张表
   '''虚拟字段不会在表中实例化出来 而是告诉ORM创建第三张关系表'''
   
2.class Publish(models.Model):
   title=models.CharField(max_length=32)
   email=models.EmailField()
   
3.class Author(models.Model):
   name=models.CharField(max_length=32)
   age=models.IntegerField()
   # 一对一外键
   author_detail=models.OneToOneField(to='AuthorDetail')
   '''自动在外键字段后面加_id后缀'''
   
4.class AuthorDetail(models.Model):
   phone=models.BigIntegerField()
   addr=models.CharField(max_length=128)

django请求生命周期流程图

反向同步,orm创建外键关系,django请求生命周期流程图,路由匹配,无名有名分组与反向解析

路由层之路由匹配

'''路由可以看成是除去ip和port之后的地址'''
url()方法
1.第一个参数其实是一个正则表达式
   2.一旦第一个参数匹配到了内容直接结束匹配 执行对应的视图函数
   url(r'^test/$',views.test)

无名分组&有名分组

# 正则表达式分组:给正则表达式加一个小括号
url(r'^test/(\d+)/$',views.test)
'''
无名分组
将括号内正则表达式匹配到的内容当做位置参数传递给后面的视图函数
'''
url(r'^testadd/(?P<id>\d+)/$',views.testadd)
'''
有名分组
将括号内正则表达式匹配到的内容当做关键字参数传递给后面的视图函数
'''

是否可以结合使用

# 无名有名分组不能混合使用
url(r'^test2/(\d+)/(\d+)/$',views.test2),
url(r'^test2/(?P<id>\d+)/(?P<id1>\d+)/$',views.test2)
# 可以单个重复使用

反向解析

当路由频繁变化的时候,html界面上的连接地址如何做到动态解析
# 1.给路由与视图函数对应关系添加一个别名(名字自己指定 只要不冲突即可)
url(r'^index/',views.index,name='index_name')
# 2.根据该别名动态解析出一个结果,该结果可以直接访问到对应的路由
前端
  <a href="{% url 'index_name' %}">111</a>
   后端
  from django.shortcuts import reverse
       reverse('index_name')
   ps:redirect括号内也可以直接写别名

无名有名反向解析

# 无名反向解析
url(r'^index/(\d+)/',views.index,name='index_name')
后端
reverse('index_name',args=(1,))  # 只要给个数字即可
前端
<a href="{% url 'index_name' 1 %}"></a>  # 只要给个数字即可
   
# 有名反向解析
url(r'^index/(?P<id>\d+)/',views.index,name='index_name')
后端
reverse('index_name',kwargs={'id':666})  # 只要给个数字即可
前端
<a href="{% url 'index_name' id=666 %}"></a>  # 只要给个数字即可
   
'''无名有名都可以使用一种(无名)反向解析的形式'''

 

上一篇:10.1 bfs思想 ——【全球变暖】(也有dfs的代码)


下一篇:ubuntu替换国内源