一、虚拟环境

对于一些需要跑在不同版本的模块下的项目,可以跑在虚拟环境中运行

创建虚拟环境的两种方法

  • pychanrm**创建

    1.创建项目时选择使用虚拟环境

    2.在已创建的项目中设置setting

注:纯净环境就是没有任何模块

  • 命令行创建

    1.下载virtualenv软件

pip3 install virtualenv

​ 2.创建虚拟环境

#创建纯净环境
virtualenv  env_django
#创建环境,继承了原安装的模块
virtualenv  --system-site-packages env_django

​ 3.激活虚拟环境

#通过命令行,进入虚拟环境的文件夹下的Script文件,输入
active

​ 4.退出虚拟环境

deactivate

二、Django2.0与Django1.0的路由区别

唯一的区别就是1.0版本路由使用的是URL(),而2.0的是re_path和path

re_path

与url的用法一模一样,并且分组出来的数据也是字符串类型

re_path('正则表达式',视图函数,参数,别名)

path

这是2.0新增的,传过来的路径是准确路径,而不是正则表达式

path('准确路径 | 转化器', 视图函数,参数,别名),
#转化器由<>包裹,包含<转化器类型:变量>,若没有转化器,将匹配任何字符串
path('test/<path:year>', views.re_test),#转化器类型
#str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
#int,匹配正整数,包含0。
#slug,匹配字母、数字以及横杠、下划线组成的字符串。
#uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
#path,匹配任何非空字符串,包含了路径分隔符(/)

自定义转换器

对于一些复杂或者复用的需要,可以定义自己的转化器。转化器是一个类或接口,它的要求有三点:

  • regex 类属性,字符串类型

  • to_python(self, value) 方法,value是由类属性 regex 所匹配到的字符串,返回具体的Python变量值,以供Django传递到对应的视图函数中。
  • to_url(self, value) 方法,和 to_python 相反,value是一个具体的Python变量值,返回其字符串,通常用于url反向引用。

#编写自定义转化器
class MyCon:# 写一个正则表达式regex = '[0-9]{4}'# 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收def to_python(self, value):return int(value)# 反向解析用的def to_url(self, value):return '%04d' % value#注册自定义转化器
from django.urls import register_converter
register_converter(MyCon,'yyy')#使用自定义转化器
path('test/<yyy:year>', views.re_test,name='test'),

三、视图层

HttpRequest对象

django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest 类中的属性。

#常用属性
# 前台Post传过来的数据,包装到POST字典中
request.POST# 前台浏览器窗口里携带的数据,包装到GET字典中
request.GET# 前台请求的方式
request.method# post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1。适合处理非表单数据
request.body# 取出请求的路径,取不到数据部分
request.path# 取出请求的路径,能取到数据部分
request.get_full_path()#取出表单请求方法为POST,并编写方式是enctype="multipart/form-data"的所有上传文件信息
request.FILES#包含所有的HTTP 首部信息,以字典的形式
request.META
#注意:request.META['HTTP_REFERER']  表示上一个跳转页面

HttpResponse对象

响应对象主要有三种形式:

  • HttpResponse():括号内直接跟一个具体的字符串作为响应体返回
  • render():将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体。
  • redirect():重定向

render()

#render(请求对象,模板名,模板需要的参数(字典形式))
render(request, template_name[, context])#要知道render和redircet都是HttpResponse的对象
#render的内部原理
from django.template import Template,Context
#调用Template,传入html标签
temp=Template('<h1>{{ user }}</h1>')
#调用Context,传入数据标签
con=Context({'user':'lqz'})
#二者合一
ret=temp.render(con)
#最后用HttpResponse传出去
return HttpResponse(ret)

JsonResponse对象

向前端返回一个json格式字符串

from django.http import JsonResponse
def test(request):dic={'name':'lqz','age':18}return JsonResponse(dic)ll = ['name', 'age']# 报错,默认不支持列表形式return JsonResponse(ll)# 支持列表形式return JsonResponse(ll,safe=False)#JsonResponse方法内部其实是调用了json模块,在内部进行了转换
import json
dic={'name':'lqz','age':18}
# 把字典转换成json格式,返回到前台
return HttpResponse(json.dumps(dic))

五、CBV与FBV

CBV:基于类的视图(Class base view)

#路由层:
url(r'^test/', views.Test.as_view()),
#视图层
from django.views import View
class Test(View):def get(self, request):#一定要传request对象return HttpResponse('get-test')def post(self, request):return HttpResponse('post-test')

FBV:基于函数的视图(Function base view)

七、简单文件上传

前端:#enctype属性#application/x-www-form-urlencoded:默认,POST会拿到控件传过来的值,除了文件,只会获得文件的名字;FILES也没获得文件#multipart/form-data:POST拿不到文件信息,会将文件信息与数据存放到FILES中;如果没上传文件就提交,POST会得到文件的字典形式,value为空#text/plain:不会拿到表单信息<form action="" method="post" enctype="multipart/form-data"><input type="file" name="myfile"><input type="text" name="password"><input type="submit" value="提交"></form>
后台:def fileupload(request):if request.method=='GET':return render(request,'fileupload.html')if request.method=='POST':# 从字典里根据名字,把文件取出来myfile=request.FILES.get('myfile')# 文件名字name=myfile.name# 打开文件,把上传过来的文件存到本地with open(name,'wb') as f:# for line in myfile.chunks():for line in myfile:f.write(line)return HttpResponse('ok')

转载于:https://www.cnblogs.com/xvchengqi/p/9931204.html

DAY74-Django框架(五)相关推荐

  1. 五分钟带你了解Django框架设计思想!

    Python编程语言的持续火爆,在最新Tiobe编程语言排行榜中位列第五,热度持续增加,尤其是在 AI 和 大数据时代,Python是 AI 和大数据时代的第一开发语言.这已经是一个不争的事实了,唯一 ...

  2. python写数据库中间件_python3开发进阶-Django框架的中间件的五种用法和逻辑过程...

    阅读目录 一.什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. 每个中间件组件都 ...

  3. Django框架(五) 用户名密码登录

    Django框架(五) 用户名密码登录 首先将setting.py中debug模式改为true 1.增加数据库 在acapp/game/models中建立player文件夹,创建__init__.py ...

  4. 订单支付和评论——基于Django框架的天天生鲜电商网站项目系列博客(十五)

    系列文章目录 需求分析--基于Django框架的天天生鲜电商网站项目系列博客(一) 网站框架搭建--基于Django框架的天天生鲜电商网站项目系列博客(二) 用户注册模块--基于Django框架的天天 ...

  5. django框架--路由系统

    目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...

  6. Python Django框架入门第一课

    Python Django框架入门 1.Django简介 Django使用python开发的一个免费的Web框架,几乎囊括了Web应用的方方面面,用于快速搭建高性能.优雅的网站. 2.配Django运 ...

  7. Django框架(上传Excel文件并读取)

    博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...

  8. [Python] Django框架入门

    说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...

  9. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

  10. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    阅读目录 一.Django请求生命周期: 二.WEB开发模式: 三.cbv源码分析: 四.认识RESTful 补充知识:跨域 五.基于原生django开发restful的接口 六.drf安装.使用.A ...

最新文章

  1. 阿里洛神云网络这局妥了!集齐“软硬结合、创新NFV、智能管理”三张牌
  2. SQLSERVER中修复状态为Suspect的数据库
  3. java 命令行 读取文件_java读取txt文件
  4. java.sql.SQLException: validateConnection false
  5. P1032 字串变换
  6. java开发环境:还在配classpath?你out啦!
  7. 科目三路考流程及注意事项
  8. mysql gtid深入_深入理解MySQL 5.7 GTID系列(四):mysql.gtid_executedPREVIOUS GTID EVENT
  9. 密码猴机器人编程合肥店_CES 2019:边搭积木边学编程 葡萄科技推出编程积木机器人PaiBots...
  10. 2019牛客暑期多校训练营(第四场)K-number
  11. Nutch-1.6在Hadoop环境下的安装配置
  12. 深度学习、机器学习、自然语言处理NLP优秀文章整理
  13. IDEA 使用Tomcat热部署
  14. 上海内推 | 上海人工智能实验室招聘计算视觉实习生(NeRF神经渲染方向)
  15. <EDEM 常见问题01>EDEM 2018-Fluent 17.0 耦合接口编译(快速上手版)
  16. 如何关闭Windows 1011自动更新
  17. java项目技术方案_javaweb应用开发项目设计方案
  18. python植物大战僵尸辅助_【Python】实现植物大战僵尸修改(二)
  19. 一篇文章,教你学会Git
  20. 创建自己的搜索引擎,利用google进行站内搜索

热门文章

  1. 2022-2028年中国煤制甲醇产业投资分析及前景预测报告
  2. hadoop,spark,scala,flink 大数据分布式系统汇总
  3. LeetCode简单题之汇总区间
  4. LeetCode简单题之二分查找
  5. LeetCode简单题之验证外星语词典
  6. VGG16迁移学习实现
  7. Java注解---通俗易懂
  8. 如何写出安全的API接口(参数加密+超时处理+私钥验证+Https)
  9. java 抽象方法 虚方法的区别_声明抽象类(纯虚方法)会大幅增加二进制大小
  10. Ubuntu 系统 Pycharm中无法使用中文输入法问题