昨日内容回顾
总分总
-
静态文件配置
url 统一资源定位符
静态文件
一些已经写好的文件
网站的css文件、js文件、img文件、第三方框架文件
存储静态文件的文件夹一般都叫做static
STATIC_URLS = "/static/"
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static1'),
os.path.join(BASE_DIR,'static2'),
os.path.join(BASE_DIR,'static3'),
]
静态文件动态解析
{% load static %}
{% static 'file_path' %} -
request对象方法
request.method
request.GET
get()
getlist()
request.POST
get()
getlist() -
pycharm链接数据库
驱动问题
-
django链接数据库
1.配置文件
2.导入模块 -
orm简介
ORM 对象关系映射
类 表
对象 记录
属性 字段值
目的:为了让不会SQL语句的python工程师通过简单的面向对象操作操作数据库
models.py
class Userinfo(models.Model):
'''主键知识'''
# name varchar(32)
name = models.CharField(max_lenght=32,verbose_name='姓名')
# password int
password = models.IntegerField(verbose_name='密码')
数据库迁移命令
python3 manage.py makemigrations
python3 manage.py migrate
ps:pycharm偷懒方式 -
基本ORM语句
from app01 import models
models.Userinfo.objects.all()
models.Userinfo.objects.filter(**{...})
models.Userinfo.objects.create(**{...})
models.Userinfo.objects.update(**{...})
models.Userinfo.objects.delete(...)
今日内容概要
-
多表外键字段创建
-
django请求生命周期流程图
-
分步拆解django知识部分
-
路由层
路由匹配
无名有名分组
反向解析
无名有名分组反向解析(难理解)
路由分发
名称空间
今日内容详细
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='手机号')
django请求生命周期流程图
要求每个人都能够画出来 并且尽可能多的书写内容
路由层之路由匹配
urls.py url()方法第一个参数其实是一个正则表达式 第一个参数只要能够匹配到内容就算是符合匹配条件直接停止匹配执行视图函数 # 路由匹配 url(r'^test/$',views.test), url(r'^testadd/$',views.testadd) # 取消自动加斜杠(默认为True) APPEND_SLASH = False
无名分组
在路由匹配的时候如果给正则表达式加上了括号 那么匹配到路由之后会将括号内正则表达式匹配的到内容当做位置参数传递给视图函数 url(r'^test/(\d+)/(\d+)/',views.test) # test(request,正则匹配的内容)
有名分组
在路由匹配的时候如果给正则表达式加上了括号并且命名 那么匹配到路由之后会将括号内正则表达式匹配的到内容当做关键字参数传递给视图函数 url(r'^testadd/(?P<user_id>\d+)/',views.testadd) # testadd(request,user_id=正则匹配的内容)
两者结合使用?
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+)/')
反向解析
"""
通过别名反向解析到一个结果
该结果可以访问到对应的视图函数
"""
前端页面反向解析
{% 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') # 还可以直接写别名
# 起别名不能冲突
作业
1.梳理前两日内容
2.整理今日内容 写好博客(用自己的话写 加上图片说明)
3.复习MySQL
4.有基础的继续往后预习