有名分组的反向解析
前端:
{% 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)