一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.
一、虚拟环境
'''
解决版本共存 1. 用pycharm选择File点击NewProject然后选择virtualenv创建一个纯净环境
2. 打开下载的目录将venv文件夹下的所有文件(纯净的环境)copy到需要指定长期使用的文件夹下
3. 再次创建项目时,将该环境(指定长期使用的文件夹下Scripts文件夹中的python.exe文件)添加到pycharm环境选择(System Interpreter)中
4. 为该环境添加需要处理的版本共存包
'''
二、路由配置主页与404
'''
路由匹配从上往下进行匹配,如果一轮都没有匹配成功,加/进行匹配
路由层:
from django.urls import path, re_path
urlpatterns = [
# 主页最上方配置
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'))
def home(request):
return redirect(reverse('root'))
# 404
def error(request):
return render(request, 'error.html')
'''
三、2.x路由分发
'''
1.无名称空间
主路由:
path('app01/', include('app01.urls'))
子路由:
path('test/', views.test) 2.有名称空间 有名称空间,与1版本不同,要将名称空间名和视图函数名放到一个数组中去
主路由:
path('app01/', include(('app01.urls', 'app01'))),
子路由:
path('test/', views.test, name='test')
模板层:
{% url 'app01:test' %} '''
四、伪静态
'''
动态页面:数据内容会发生变化的页面
静态页面:数据内容不会发生变化的页面
针对SEO(搜索引擎优化),静态页面更容易被搜索引擎网站收录
伪静态就是将动态页面伪装成静态页面,容易被搜索引擎网站收录,从而增加搜索概率,提高流量
通过.html来实现
''' '''
#起了路由别名:
路由层:
url('^index/$', views.index),
url('^article/(?P<id>(\d+)).html/$', views.article, name='article') 视图函数层:
def index(request):
return render(request, 'index.html')
def article(request, id):
return render(request, 'article.html', {'id': id}) 模板层:
index.html
<a href="{% url 'article' 1 %}">第一篇文章</a>
<a href="{% url 'article' 2 %}">第二篇文章</a>
<a href="{% url 'article' 3 %}">第三篇文章</a> article.html
<h1>第{{ id }}篇文章</h1> #没有起路由别名:
路由层:
url('^index/$', views.index),
url('^article/(?P<id>(\d+)).html/$', views.article) 视图函数层:
def index(request):
return render(request, 'index.html')
def article(request, id):
return render(request, 'article.html', {'id': id}) 模板层:
index.html
<a href="/article/1.html/">第一篇文章</a>
<a href="/article/2.html/">第二篇文章</a>
<a href="/article/3.html/">第三篇文章</a> article.html
<h1>第{{ id }}篇文章</h1> '''
五、request对象
'''
请求/index/?abc=123
1. method: 请求方式
2. GET: 存放get的请求数据 结果:<QueryDict: {'abc': ['123']}>
3. POST: 存放post的请求数据(本质是从bdoy中取出来)
4. body: post提交的数据(不能直接查看)
5. path: 请求的路径,不带参数 结果:/index/
6. request.get_full_path(): 请求路径,带参数 结果:/index/?abc=123
7. FILES: 文件数据
8. encoding: 编码格式
9. META: 数据大汇总的字典
10.is_ajax(): 是否是ajax请求 #False
'''
六、FBV与CBV
'''
FBV:function base views 函数方式完成视图响应
CBV:class base views 类方式完成视图响应
'''
'''
注意:在settings.py下的中间件配置中找到含有csrf的那条代码,将它关闭这样就可以跳过post请求的安全认证
Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了CBV。可以让我们用类写View。这样做的优点主要下面两种:
- 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
请求/path/123
视图层:
from django.shortcuts import HttpResponse
from django.views import View
class CBVView(View):
def get(self, request,id):
print('get请求!',id) #id=123
return render(request,'cbv.html')
def post(self, request,id):
print('post请求!',id) #id=456
print(request.POST.get('msg',None)) #获取提交的数据
return HttpResponse("响应post请求")
路由层:
url('^path/(?P<id>\d+)/$', views.CBVView.as_views()) 模板层:
<form action="/path/456/" method="post">
<input type="text" name="msg">
<input type="submit">
</form>
'''
七、文件上传
'''
前端:upload.html页面
1.往自身路径发送post请求,要将第四个中间件注释
2.multipart/form-data格式允许发送文件
3.multiple属性表示可以多文件操作
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple="multiple">
<input type="submit" value="上传">
</form> 后台: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类封装,就是存放提交的文件数据的文件流对象,file.name就可以获得字符串类型的file的名字
for file in files:
with open(file.name, 'wb') as f:
for line in file:
# 从file中去数据写到指定文件夹下的指定文件中,大文件用file.chunks()
f.write(line)
return HttpResponse('上传成功') 注意: ?拼接从get中拿数据,body中数据从post中拿
'''
一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.的更多相关文章
- Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...
- WebService文件上传相关配置(404.13、超出限制、超时)
最近在做文件上传的功能,遇到一些问题,记录如下,以备以后使用. 1.HTTP Error 404.13 - Not Found,请求筛选模块被配置为拒绝超过请求内容长度的请求. IIS默认允许请求长度 ...
- SpringMVC常用配置(二),最简洁的配置实现文件上传
Spring.SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4 ...
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)
一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- 使用Typescript重构axios(二十五)——文件上传下载进度监控
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- [转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例
原文地址:http://www.stepday.com/topic/?459 作文一个ExtJs的入门汉子,学习起来的确是比较费劲的事情,不过如今在这样一个网络资源如此丰富的时代,依然不是那么难了的. ...
随机推荐
- xml文档对象模型doc
对与DOM来说 ,一切都是节点Node; ②Document可以看成一个节点,Element可以看成一个节点,Text可以看成一个节点, 封装出来的对象都可以看成节点Node; ③在JDK中,Node ...
- Asp.net Core认证和授权:Cookie认证
关于asp.net core 的文章,博客园已经有很多大牛写过了. 这里我只是记录下自己在学习中的点滴和一些不懂的地方 Cookie一般是用户网站授权,当用户访问需要授权(authorization) ...
- bat cmd 获取管理员权限
@ echo off % % ver|find "5.">nul&&goto :Admin mshta vbscript:createobject()(win ...
- vue搭建环境并创建项目
1.>npm install @vue/cli -g 2.创建项目A a.>vue ui b.在弹出的管理界面创建项目 或 a.npm install -g @vue/cli-init b ...
- c# webapi 跳转
c# webapi 跳转 public HttpResponseMessage Post() { // ... do the job // now redirect Http ...
- MYSQL导入数据时,出现错误:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表 ...
- 有关g++的Xlinker选项
事情的起因是,在使用Eclipse配置opencv的库时,发现使用-Wl 选项需要自己在Linker flags的输入框里指定.并不是像使用-l选项或-I选项那样可以直接添加选项的条目就可以了.但是在 ...
- 水题 J
一张CT扫描的灰度图像可以用一个N*N(0 < N <= 100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255.我们假设给定的图像中有且只有一个肿瘤.在图上监测 ...
- websocket服务器握手协议
测试网页代码如下 <!DOCTYPE html> <html> <head> <title>测试 websocket 世界最简单案例</title ...
- css 文字样式
Gradient 3D text 代码区域 /*css */ body { background-color: #272727; } h1 { font-family: "Arial&quo ...