1.orm表关系的创建
表关系
一对多
多对多
一对一
图书管理系统表设计
图书表
出版社表
作者表
作者详情表
ps:'换位思考'
表关系
图书表与出版社表
一对多 外键字段建在多的一方
models.ForeignKey(to='Publish')
图书表与作者表
多对多 外键字段需要建在第三张关系表
models.ManyToManyField(to='Author')
作者表与作者详情表
一对一 外键字段建在任意一方均可 推荐建在查询频率高
author_detail = models.OneToOneField(to='AuthorDetail')
# 复习MySQL创建表的完整语法 字段类型 约束条件
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField(verbose_name='书名',max_length=32)
# 小数总共8位 小数位占两位
price = models.DecimalField(verbose_name='价格',max_digits=8,decimal_places=2)
# 书与出版社是一对多 并且书是多的一方 外键字段建在数据表中
publish = models.ForeignKey(to='Publish')
"""针对外键字段 orm会自动加_id后缀 如果你加了再继续加_id"""
# 书与作者是多对多 orm不需要你自己建 它自动帮你建
authors = models.ManyToManyField(to='Author') # 告诉orm自动创建第三张关系表
"""虚拟字段 不会在表中展示出来 用于ORM自动创建第三张关系表"""
class Publish(models.Model):
name = models.CharField(verbose_name='出版社名称',max_length=32)
addr = models.CharField(verbose_name='出版社地址',max_length=64)
class Author(models.Model):
name = models.CharField(verbose_name='姓名', max_length=32)
addr = models.CharField(verbose_name='地址', max_length=64)
# 作者与作者详情是一对一 推荐建在查询频率高的
author_detail = models.OneToOneField(to='AuthorDetail')
"""针对外键字段 orm会自动加_id后缀 如果你加了再继续加_id"""
class AuthorDetail(models.Model):
age = models.IntegerField(verbose_name='年龄')
phone = models.BigIntegerField(verbose_name='手机号')
2.django请求生命周期流程图
3.路由层之路由匹配
urls.py
url()方法第一个参数其实是一个正则表达式
第一个参数只要能够匹配到内容就算是符合匹配条件直接停止匹配执行视图函数
# 路由匹配
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd)
# 取消自动加斜杠(默认为True)
APPEND_SLASH = False
1.无名分组
在路由匹配的时候如果给正则表达式加上了括号
那么匹配到路由之后会将括号内正则表达式匹配的到内容当做位置参数传递给视图函数
url(r'^test/(\d+)/(\d+)/',views.test) # test(request,正则匹配的内容)
2.有名分组
在路由匹配的时候如果给正则表达式加上了括号并且命名
那么匹配到路由之后会将括号内正则表达式匹配的到内容当做关键字参数传递给视图函数
url(r'^testadd/(?P<user_id>\d+)/',views.testadd) # testadd(request,user_id=正则匹配的内容)
3.两者结合使用?
url(r'^testsub/(\d+)/(?P<sub_id>\d+)/',views.sub)
无名有名分组两者不能混合使用!!!
单独的情况下可以重复多次!!!
url(r'^testsub/(\d+)/(\d+)/')
url(r'^testsub/(?P<sub_id>\d+)/(?P<sub_id>\d+)/')
4.反向解析
"""
通过别名反向解析到一个结果
该结果可以访问到对应的视图函数
"""
前端页面反向解析
{% url 'index_view' %}
后端流程反向解析
from django.shortcuts import render, HttpResponse, redirect, reverse
def func(request):
# 第一种
_url = reverse('index_view')
print(_url)
# return redirect('/index/')
# 第二种
return redirect('index_view') # 还可以直接写别名
# 起别名不能冲突