表关系的创建方式
表与表之间的关系就三种
一对一 OneToOne(to='') # to后面能够跟字符串的表名 也能够直接跟变量名表名(该表名必须在上面提早定义出来)
一对多 ForeignKey(to='')
多对多 ManyToMany(to='')
本身必定要会三种关系的推导步骤 以及建表的注意事项前端
一对一和多对多外键字段 建在哪一方均可以 可是推荐你建在查询频率较高的一方 以便后续的orm查询 一对多外键字段 建在多的那一方 一对一和一对多外键字段 在建立表的时候回自动加_id后缀 不管你有没有加 多对多字段不会在表中建立出来 只是用来告诉orm自动帮你建立第三张表 可以方便后续orm查询操做 django请求生命周期流程图 路由层 url方法第一个参数是一个正则表达式 匹配的特色:只要正则表达式可以匹配到内容 那么会马上结束匹配 直接执行后面所对应的视图函数 正是因为该特色会出现,当你的项目特别庞大的时候 可能会出现url被顶替的现象(test testadd) 若是出现上述状况 1.修改正则表达式 2.将下面的放到上面去 django在路由匹配的时候默认有一个补救机制 当你的url没有正常匹配到 django会让浏览器自动加斜杠再来匹配一次(重定向) 配置文件中有一个参数用来控制该机制是否容许 APPEND_SLASH = True/False 网站首页能够使用的匹配方式 # 网站首页 url(r'^$',home), # 网站404页面的设计(了解) url(r'',error) 路由匹配 无名分组 给正则表达式加括号分组 在路由匹配成功以后调用视图函数的时候 会将括号内正则表达式匹配到的内容当作位置参数传递给视图函数 url(r'^index/(\d+)/',index) # index(request,\d+内容) 有名分组 给正则表达式加括号分组并起别名 在路由匹配成功以后调用视图函数的时候 会将括号内正则表达式匹配到的内容当作关键字传递给视图函数 url(r'^index/(?P<year>\d+)/',index) # index(request,year=\d+内容) 注意事项 无名有名不能混合 可是单个状况下 能够使用屡次 反向解析 本质:根据别名 动态解析出一个结果 该结果能够直接访问到别名所对应的url 没有正则表达式符号 url(r'^index/',views.index,name='xxx') 前端 {% url 'xxx' %} # index/ 后端 from django.shortcuts import reverse reverse('xxx') # index/ 出现正则表达式符号 # 无名分组 url(r'^index/(\d+)/',views.login,name='yyy') # index/数字/ 前端 {% url 'yyy' 数字 %} # index/数字/ 后端 reverse('xxx',args=(数字,)) # 只要是容器类型 内部就算只有一个元素 你也给我习惯性的把分隔符逗号加上 # 有名分组 # 你能够直接使用无名分组的方式便可 前端 {% url 'yyy' 名字=数字 %} # index/数字/ 后端 reverse('xxx',keargs={'名字':数字}) 路由分发 前提 全部的app均可以有本身独立的urls.py templates模板文件夹 static静态文件夹 正是因为该特色 使得基于django实现多人开发 很是的方便 每一个人只须要开发本身的app便可 路由分发 总路由再也不直接作路由与视图函数对应关系了 而是仅仅作一个转发的功能 好处:更加的解耦合 更加好维护 from django.conf.urls import url,include url(r'^应用名1/',include('应用名1.urls')) url(r'^应用名2/',include('应用名2.urls')) 名称空间 当不一样的应用中给路由与视图对应关系起了相同的别名 在反向解析的时候 并不能直接识别到是哪一个应用下的 url(r'^应用名1/',include('应用名1.urls',namespace='应用名')) {% url '应用名1:相同的别名' %} {% url '应用名2:相同的别名' %} reverse('应用名1:相同的别名') reverse('应用名2:相同的别名') # 其实你彻底能够不适用名称空间 # 你只须要保证在起别名的时候不要出现冲突便可 建议作法就是加 应用前缀_别名 虚拟环境 给每个项目提供一个专门属于该项目本身的所需模块 避免浪费 节省资源 requirement.txt django==1.11.11 Flask==1.4 建议不要频繁的开设虚拟环境 django版本区别 path与url path第一个参数不支持正则 若是你还想使用正则 你能够re_path跟你的url如出一辙 path虽然不支持正则 可是提供了五个默认的转换器 可以自动帮你转换数据类型 还支持用户自定义转换器(不要记忆 直接拷贝便可) request方法获取文件数据 request.FILES 获取form表单上传的文件数据 file_obj = request.FILES.get('myfile') file_obj.name 文件名 f = open(file.obj.name,'wb') for chunk in file_obj.chunks(): # for line in file_obj: f.write(chunk) f.close()