博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Djiango路由分发/伪静态页面/request对象/FBV CBV/文件上传
阅读量:5111 次
发布时间:2019-06-13

本文共 4329 字,大约阅读时间需要 14 分钟。

一、复习

1. url函数:url('^index/$', views.index, {
'msg': '默认参数'}, name="路由别名")2. 有名无名分组: /page/10/1 -- 路由层:'^page/(\d+)/(\d+)/$' 视图层:def page(request, n1, n2) n1=10, n2=1 -- 路由层:'^page/(?P
\d+)/(?P
\d+)/$' 视图层:def page(request, id, num) num=10, id=1 -- 注:有名无名不能混用3. 路由分发: -- 有多个app,1.创建app: startapp app_name -> 2.配置,在settings中配置app信息 -> 在应用自己目录下创建urls.py -- 主路由:url('^app01/', include('app01.urls', namespace='app01')) -- 子路由:url('^login/$', views.login, name='login') -- 访问:/app01/login/4. 反向解析: {% url 'app01:login' [参数们] %} reverse('app01:login'[, args=() | kwagrs={}])5. 2.x新特性: url, include, re_path, path -- re_path同url -- path采用的是绝对字符串匹配 path('index/', views.index, name='index') -- path: str|int|slug|uuid|path 语法:path('page/
/', ...) -- 自定义转化器:1.按格式自定义转化器类 2.注册自定义转化器类并起转化器名 3.在路由中用转化器名进行匹配6. 多app共存问题 -- 路由问题:import app01.views as app01_view | 路由分发 -- 模板问题: -- 在templates文件夹下建立与应用名相同的文件夹,将该应用的模板文件放置自己应用名文件夹下,render(request, 'app01/login.html') -- 在各自app应用下建立templates文件夹,再在templates下建立与应用同名文件夹,放置自己的模板页面,render(request, 'app01/login.html') -- 模板页面命名:app01_login.html

二、虚拟环境

解决版本共存​1. 用pycharm选择virtualenv创建一个纯净环境2. 将环境copy到需要指定长期使用的文件夹下3. 再次创建项目时,将该环境添加到pycharm环境选择中4. 为该环境添加需要处理的版本共存包

三、路由配置主页与404

路由层:from django.urls import path, re_pathurlpatterns = [    # 主页最上方配置    re_path('^$', root, name="root"),    re_path('^index/$', index),    re_path('^home/$', home),​    # 其他路由...​    # 404配在最下方    re_path('/$', error)]视图层:from django.shortcuts import render, redirect, reverse  # 需要导入# 主页def root(request):    return render(request, 'root.html')def index(request):    return redirect(reverse('root'))   # reverse括弧中跟的参数为路由的别名def home(request):    return redirect(reverse('root'))# 404def error(request):    return render(request, 'error.html')​# redirect: 返回的参数可以可以是:# 一个模型: 将调用模型的get_absolute_url()函数;# 一个视图, 可以带有函数: 可以使用urlresolvers.reverse来反向解析名称;# 一个绝对的或相对的URL, 将原封不动的作为重定向的位置.# redirect("/index/") | redirect("http:127.0.0.1:8000/index/")

五、2.x路由分发

1.无名称空间主路由:path('app01/', include('app01.urls'))子路由:path('test/', views.test)​2.有名称空间主路由:path('app01/', include(('app01.urls', 'app01')[, namespace="app01"])), #[]中的可以不用写子路由:path('test/', views.test, name='test')模板层:{
% url 'app01:test' %}

六、伪静态

动态页面:数据内容会发生变化的页面静态页面:数据内容不会发生变化的页面针对SEO(搜索引擎优化),静态页面更容易被搜索引擎网站收录伪静态就是将动态页面伪装成静态页面,容易被搜索引擎网站收录,从而增加搜索概率,提高流量​路由层:url('^index/$', views.index),url('^article/(?P
(\d+)).html/$', views.article, name='article') # url中加上.html(访问时也需要有后缀如此处http://127.0.0.1:8000/article/2.html)变成伪静态页面.​视图函数层:def index(request): return render(request, 'index.html')def article(request, id): return render(request, 'article.html', {
'id': id})​模板层:index.html
第一篇文章
第二篇文章
第三篇文章​article.html

第{
{ id }}篇文章

七、request对象

1. method: 请求方式  #request.method2. GET: get请求的参数  #request.GET.get("k")3. POST: post请求的参数(本质是从bdoy中取出来)  #request.POST.get("k")4. body: post提交的数据(不能直接查看)5. path: 请求的路径,不带参数6. request.get_full_path(): 请求路径,带参数7. FILES: 文件数据8. encoding: 编码格式9. META: 数据大汇总的字典

八、FBV与CBV

FBV:function base views 函数方式完成视图响应CBV:class base views 类方式完成视图响应​视图层:from django.shortcuts import HttpResponsefrom django.views import Viewclass CBVView(View):        def get(self, request):        return HttpResponse("响应get请求")        def post(self, request):        return HttpResponse("响应post请求")路由层:url('^path/$', views.CBVView.as_views())

九、文件上传

前端:upload.html页面1.往自身路径发送post请求,要将第四个中间件注释2.multipart/form-data格式允许发送文件3.multiple属性表示可以多文件操作
​后台:re_path('^upload/$', upload)def upload(request): if request.method == "GET": return render(request, 'upload.html') if request.method == "POST": # 如果一个key对应提交了多条数据,get取最后一个数据,getlist取全部数据 last_file = request.FILES.get('files', None) files = request.FILES.getlist('files', None) # import django.core.files.uploadedfile.TemporaryUploadedFile # file是TemporaryUploadedFile类型,本质是对系统file类封装,就是存放提交的文件数据的文件流对象 for file in files: with open(file.name, 'wb') as f: for line in file: # 从file中去数据写到指定文件夹下的指定文件中 f.write(line) return HttpResponse('上传成功')

转载于:https://www.cnblogs.com/peng-zhao/p/10452997.html

你可能感兴趣的文章
NYOJ-44 简单DP
查看>>
java Integer与int详解 01
查看>>
OpenCV探索之路(十一):轮廓查找和多边形包围轮廓
查看>>
【Python】使用socketserver建立一个异步TCP服务器
查看>>
[转] 面向对象设计原则
查看>>
AJAX-----03远古时期的ajax
查看>>
Jquery easyui Tree的简单使用
查看>>
《Linux命令行与shell脚本编程大全》 第六章环境变量
查看>>
Java集合框架学习总结
查看>>
commands 模块 与sys模块
查看>>
洛谷 P2234 [HNOI2002]营业额统计
查看>>
SetTimeOut 与 SetInterval 区别
查看>>
VC++编程 两类典型的 LNK2001错误分析及解决方法
查看>>
对于redis框架的理解(三)
查看>>
C语言模块化编译介绍
查看>>
file控件,以及fileList对象。
查看>>
关于多线程(GCD介绍)
查看>>
设计模式之观察者模式
查看>>
T-SQL基础(五)之增删改
查看>>
Jzoj4786 小a的强迫症
查看>>