###有名分组无名分组反向解析
# 无名分组反向解析
url(r'^index/(\d+)/',views.index,name='xxx')
前端:
{% url 'xxx' %}
后端:
from django.shortcus import reverse
reverse('xxx', args(参数, ))
# 有名分组反向解析
url(r'^index/(?P<name>\d+)/',views.index,name='xxx')
# 方式一
前端:
{% url 'xxx' name=参数 %}
后端:
reverse('xxx', kwargs={'name': 参数})
# 方式二:
前端:
{% url 'xxx' %}
后端:
reverse('xxx', args(参数, ))
###路由分发
```python
总路由
from django.conf.urls import url, include
urlpatterns = [
url(r'^app01/', include('app01.urls'),
url(r'^app02/', include('app02.urls'),
]
# 子路由
app01
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^index/', views.xxx),
]
url: 127.0.0.1:8000/app01/index/
###名称空间
正常情况下的反向借洗是没有办法自动识别前缀的
解析的时候需要 reverse('app01:index')
一般来讲, 有多个app的时候我们在起别名的时候会加上app的前缀
如name='app01_index'
###伪静态
将一个动态网页伪装成静态网页
伪装的目的在于增大本网站的SEO查询力度
并且增加搜索引擎收藏本网站的概率
在路由名后面加上.html
url(r'^index.html', views.xx)
###虚拟环境
创建方式有两种
第一种: 在pycharm中创建
第二种, 使用命令行创建
进入到想要创建虚拟环境的文件夹下
virtualenv 环境名称
# 也可以选择解释器
virtualenv 环境名称 --python=解释器的安装路径
启动虚拟环境;
# 进入到环境的Scripts目录下
activate.exe 激活环境
deactivate 退出虚拟环境
###JsonResponse对象
"""
json格式的数据有什么用?
前后端数据交互需要使用到json作为过渡 实现跨语言传输数据
前端序列化
JSON.stringify() json.dumps()
JSON.parse() json.loads()
"""
import json
from django.http import JsonResponse
def ab_json(request):
user_dict = {'username':'jason好帅哦,我好喜欢!','password':'123','hobby':'girl'}
l = [111,222,333,444,555]
# 先转成json格式字符串
# json_str = json.dumps(user_dict,ensure_ascii=False)
# 将该字符串返回
# return HttpResponse(json_str)
# 读源码掌握用法
# return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
# In order to allow non-dict objects to be serialized set the safe parameter to False.
# return JsonResponse(l,safe=False)
# 默认只能序列化字典 序列化其他需要加safe参数
### form表单上传文件后端如何操作
"""
form表单上传文件类型的数据
1.method必须指定成post
2.enctype必须换成formdata
"""
def ab_file(request):
if request.method == 'POST':
# print(request.POST) # 只能获取普通的简直对数据 文件不行
print(request.FILES) # 获取文件数据
# <MultiValueDict: {'file': [<InMemoryUploadedFile: u=1288812541,1979816195&fm=26&gp=0.jpg (image/jpeg)>]}>
file_obj = request.FILES.get('file') # 文件对象
print(file_obj.name)
with open(file_obj.name,'wb') as f:
for line in file_obj.chunks(): # 推荐加上chunks方法 其实跟不加是一样的都是一行行的读取
f.write(line)
return render(request,'form.html')
- [ ]