前端反向解析 应用场景:通过访问a路由,到达a的对应视图函数,函数到达对应的前端a标签 a标签的路径是b路由,如果我们在后端改变b路由的路径,那么a标签便无法访问 到b路由,只能手动在前端改变a标签的路径,我们可以给后端的b路由添加一个 name='user'属性值,通过user来绑定路径,我们在前端{% url 'user' %}这样 书写,可以通过user来动态解析后端路径
后端反向解析: 我们需要导一个reverse模块,res=reverse('user') ,user是后端路由的name的值 打印res就是路由的路径,只要通过name的值就可以找到前面的路径。
分组前端反向解析: 前端a标签的路径满足正则表达式就行,前端的代码{% url name属性值 满足正则的值} 记住代码的执行顺序就行,你前端一点a标签,a标签的代码刚好能满足后端的匹配条件 那么肯定能解析出地址
无名分组后端反向解析 res=resvers('name属性值', args(满足正则值,)) print(res) 来动态解析地址,只要能匹配就能解析
有名分组的反向解析 前端: {% url 1 %}推荐使用(无论有名无名都可以) {% url year=1 %} 可以使用后端 res=sevser('add' args=(1,))有名无名都能用(推荐) res=severs('add' kwargs={year:1}有名用
有名分组:
用括号将正则括起来,被括号括起来的值会被当成位子实参传给
后面的视图函数的形参,位置传参的特点是一一对应,如果形参为
args,打印出来res则会被元组的形式
有名分组 (?P<year>[0-9]{4})会将year=正则匹配的值当成关键字实参传给后面的函数为形参 关键字传参特点,(year=2019 ,month=12)>>>对应形参必须为(year,month) 且形参调换位置,值不会改变
路由分发: 第一步,创建APP,在不同的app下创建自己的urls 第二步,在项目总路由导一个模块include 第三步,在项目urls写下url(r^app名/', include('app名.urls ')) 第四步,去分发的app下的urls文件夹写下url(r^函数名/’,view.函数名) 第五步,去对应的view,写下对应的视图函数 思路:请求先经过总路由匹配,匹配成功后再去对应的app文件下的 urls匹配,匹配成功再执行对应的视图函数,注意不能在总路由加$
返回前端json格式的数据: 方法一 res={'name':'egon'} return(json.dumps(res)) 方法二 return(JsonResponse(res))
文件上传 联想一下之前的文件上传,还要解决粘包,如今用Django怎么上传? 第一步:得提交文件,用form表单,提交方式POST,enctype=multipart/form-data 第二步:获取文件对象,request.FILES.get(html中的文件名) 第三步:file_obj.name,获取文件名 第三步;打开文件写,至于下载到哪?自己可以配置路径 for line in file_obj: f.write(line)