zoukankan      html  css  js  c++  java
  • django之路由层(反向解析)总结

    表关系的建立方式
    表与表之间的关系就三种
    一对一 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()
  • 相关阅读:
    506Relative Ranks(LeetCode)
    计算二进制中1的个数
    vector<vector<int>> 简单知识介绍
    167. Two Sum II
    561. Array Partition I(LeetCode)
    sizeof 用法部分总结
    530. Minimum Absolute Difference in BST(LeetCode)
    JS计算两个日期之间的天数
    路演会上会登记结论的委员信息页面
    eclipse安装SVN插件
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/11939432.html
Copyright © 2011-2022 走看看