ORM之视图层
1.request对象
前台POST传来的数据,包装到POST字典中request.POST
前台浏览器窗口携带的数据,包装到GET字典中request.GET
前台请求的方式,request.method 比如GET,或POST等
post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1
request.body 是body体里的数据,是bytes类型
取出请求的路径,取不到数据部分print(request.path)
取出请求的路径,能取到数据部分print(request.get_full_path())
request.META包含了所有的数据
取出request.POST所带数据时,用get。不能用request['name']这种形式,因为万一没有值,用get程序不会崩溃,但是request['name']这种取值方式程序会崩溃。
request.get('name')取的是列表中最后一个值
request.getlist('name')取的是列表,所有值都在列表中
request往后输入. 后面可以接的红色的代表函数,蓝色和黄色代表变量
2.JsonResponse对象
JsonResponse的作用:可以传回json格式的数据,给前端进行script操作,这样可以做前后端分离。
1)在没有导入JsonResponse时,要传输json格式的数据,则要在views里导入json模块
def test(request): import json dic={'name':'lqz','age':18} return HttpResponse(json.dumps(dic))
使用json模块则可以传多种数据类型
2)导入:from django.http import JsonResponse
视图函数中传递json格式数据
def test1(request): dic = {'name': 'lqz', 'age': 18} return JsonResponse(dic)
默认情况下只能转换字典类型数据,然后进行传输,如果要转换非字典类型,则要添加safe=False
from django.http import JsonResponse def test1(request): ll=['name','age'] return JsonResponse(ll,safe=False)
否则则会报错
3.cbv和fbv
cbv基于类的视图
1)路由层:url(r'^test/',views.Test.as_view()),
2)视图层
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基于函数的视图
4.简单文件上传
django传送文件时,前台要用enctype="multipart/form-data"形式。
提交的文件会存在request.FILES里面,是django封装的一个对象,类似字典。字典中对应关系是{名字:文件对象}
文件对象只能从request.FILES里面取出,如果这时有POST传过来的数据,那么相对应的只能从request.POST取出
注意:django只对enctype="multipart/form-data"和enctype="application/x-www-form-urlencoded"进行了处理,以上语句只在这两种形式下有用。
前台
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {#只有enctype="multipart/form-data"才能传输文件#} {#当enctype="multipart/form-data"时,<input type="text" name="name" >提交过来的数据,在POST可以找到#} {#在django中,只有编码enctype="application/x-www-form-urlencoded"和enctype="multipart/form-data"这两种模式被 django处理过,可以直接提取POST中的数据。#} <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="myfile" > <input type="text" name="name" > <button>提交</button> </form> </body> </html>
后台
def fileupload(request): if request.method=='GET': return render(request,'fileupload.html') if request.method=='POST': myfile=request.FILES.get('myfile')#myfile是要上传的文件对象,myfile.name是上传文件的名字 with open(myfile.name,'wb') as f:#上传到的路径是在根路径 for line in myfile: f.write(line) return HttpResponse('ok')
5.get请求和post请求
get:获取数据,页面,携带数据不是很重要的数据(数据量大小有限制),提交的是django封装的数据类型,类似字典,可以用get取数据
<QueryDict: {'aa': ['xx']}>
post:往后台提交数据,提交的是django封装的数据类型,类似字典,可以用get取数据。
<QueryDict: {']}>
注意,这里有点不一样 地方:
使用get请求时
<a href="update_user?id={{ user.id }}">这里?前面会自动拼接一个/
但是在post提交请求时
<form action="/update_user/?id={{ user.id }}">这里?前面不会自动拼接/
为了统一写法规范,一律加/
6.事务
from django.db import transaction
with transaction.atomic():
#两条创建
pass
把两条创建数据的命令放进事务里,要么两条都创建成功。要么其中任意一条失败,会进行回滚,都创建失败
最新文章
- SSH网上答题系统质量属性
- 一个简单的Windows下的socket程序
- recordcount
- Power Network 分类: POJ 2015-07-29 13:55 3人阅读 评论(0) 收藏
- 【转】xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
- gridview中判断隐藏还是现实
- ACM第三题 完美立方
- wpf 透明效果 需要DwmApi.dll文件,然后定义一个函数去画Aero区域,从而实现整个窗口的Aero化。
- android缓存之Lrucache 和LinkedHashMap
- Mac下安装pymssql
- 广州.NET微软技术俱乐部 - 动手实验室
- Selenium Webdriver 中的 executeScript 使用方法
- Centos 6.x/7.x yum安装php5.6.X
- 在XIB 或者 SB 上面 实现 半透明的背景上添加UILabel是文字不透明
- Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
- 大疆OSMO口袋云台相机惊艳上市!友商该如何是好。。。
- Vue2.0,Express实现的简单跨域
- 运行时常量池中的符号引用/String.intern() /ldc指令
- OpenGL ES 3.0(五)
- PHP SPL使用方法 自动加载和迭代器
热门文章
- ubuntu下安装Python3
- Docker容器集群管理之Swarm
- ROS中.launch文件的remap标签详解
- {MySQL的库、表的详细操作}一 库操作 二 表操作 三 行操作
- 恢复制作了系统盘的U盘
- POJ 2259 - Team Queue - [队列的邻接表]
- tensoflow模型中提示:ValueError: Variable rnn/basic_rnn_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? 解决办法
- hbase与sqoop的集成
- nethogs 查看 Linux 进程的网络使用
- winform excel导入--自带office.interop.excel方式