视图层

	1 虚拟环境
		1 用pychanrm创建--->files-->newproject--->选择虚拟环境
		2 settings-->project创建
		3 用命令行创建,详见https://www.cnblogs.com/liuqingzheng/p/9508851.html
	2 django 2.0和django 1.0 路由层区别(*****url,re_path分组分出来的数据,是字符串)
-re_path:跟1.0的url用法相同 -path:传的路径,是准确路径 5个转换器-->path('test/<path:year>', views.re_test), str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式 int,匹配正整数,包含0。 slug,匹配字母、数字以及横杠、下划线组成的字符串。 uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。 path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?) -自定义转换器 1 定义一个类: class MyCon: # 写一个正则表达式 regex = '[0-9]{4}' # 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收 def to_python(self, value): return int(value) # 反向解析用的 def to_url(self, value): return '%04d' % value 2 from django.urls import register_converter register_converter(MyCon,'yyy') 3 path('test/<yyy:year>', views.re_test,name='test'),
2.0 on_delete后面可以跟的参数:
如:on_delete=models.CASCADE

CASCADE:这就是默认的选项,级联删除,你无需显性指定它。
PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
SET(): 自定义一个值,该值当然只能是对应的实体了


	2.1补充:
		# 为假,不会加反斜杠
		# APPEND_SLASH=False
	3 视图层之HttpRequest对象
		# 前台Post传过来的数据,包装到POST字典中
		# request.POST
		# 前台浏览器窗口里携带的数据,包装到GET字典中
		# request.GET
		# 前台请求的方式
		# request.method
		# post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1
		# request.body
		# 取出请求的路径,取不到数据部分
		# print(request.path)
		# 取出请求的路径,能取到数据部分
		# print(request.get_full_path())
		# print(request.META)
	4 视图层之HttpResponse对象
		三件套:render,HttpResponse,redirect
		render函数:
			temp=Template('<h1>{{ user }}</h1>')
			con=Context({'user':'lqz'})
			ret=temp.render(con)
			print(ret)
			# return render(request,'index.html')
			return HttpResponse(ret)
		
	5 视图层之JsonResponse对象
		-导入:from django.http import JsonResponse
		-视图函数中:
			def test(request):
				import json
				# dic={'name':'lqz','age':18}
				ll = ['name', 'age']
				# 把字典转换成json格式,返回到前台
				# return HttpResponse(json.dumps(dic))
				# 把列表转换成json格式,返回到前台
				# return HttpResponse(json.dumps(ll))
				# 把字典转换成json格式,返回到前台
				# return JsonResponse(dic)
				# 报错,默认不支持列表形式
				# return JsonResponse(ll)
				# 支持列表形式
				return JsonResponse(ll,safe=False)
	6 CBV和FBV
		-基于类的视图
			-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')
		-基于函数的视图			
		
	7 简单文件上传
		前端:
			<form action="" method="post" enctype="multipart/form-data">
			{#<form action="" method="post" enctype="application/x-www-form-urlencoded">#}
				<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':
					# FILES
					print(request.FILES)
					print(type(request.FILES.get('myfile')))
					# 从字典里根据名字,把文件取出来
					myfile=request.FILES.get('myfile')
					from django.core.files.uploadedfile import InMemoryUploadedFile
					# 文件名字
					name=myfile.name
					# 打开文件,把上传过来的文件存到本地
					with open(name,'wb') as f:
						# for line in myfile.chunks():
						for line in myfile:
							f.write(line)
					return HttpResponse('ok')
	
		补充:*****编码方式multipart/form-data或者:application/x-www-form-urlencoded传的数据,都可以从POST中取出来
posted @ 2018-11-08 19:17  不沉之月  阅读(76)  评论(0编辑  收藏  举报