django之视图层以及一些的补充

一,虚拟环境的搭建

1,用pycharm在创建的时候--->files-->newproject--->选择虚拟环境

2,在settings---->project创建新的虚拟环境

3,用命令行中,1>安装:pip3 install virtualenv

                       2>创建虚拟环境:

         -(1)virtualenv env_django(创建虚拟环境)

   -(2)virtualenv  env_django(创建纯净环境)
        -(2)virtualenv --system-site-packages env_django(创建环境,继承原安装的模块)
    激活该虚拟环境:

                       3>windows进入到目录里,Script文件夹输入:activate

                        -linux:soruse env1/Script/activate

                        退出虚拟环境:
                                -deactivate
                       在pycharm中使用虚拟环境
                                -files--settings--Project--Project Interpreter--add选择虚拟环境路径下的python.exe即可

二,django2.0和django1.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}'
    # 匹配出来的数据会被传到这里,return 回去,会被视图函数接收
    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')

注意:APPEND_SLASH=False    (为假时,不会自己加反斜杠,一般不会设置,默认是真)

三,视图层之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)

四,视图层之,三件套

三件套: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)

 需要用json格式把数据传输到页面,一般导入json模块,在django框架中,可以这样导入

import json
dic={'name':'六'}
ret=json.dumps(dic,ensure_ascii=False)
print(ret)

from django.http import JsonResponse
def test(request):
    dic = {'name': '六'}
    # 如果json格式中的字典出现二进制的格式,则需要在括号里面把阿斯克码改成Flase
    return JsonResponse(dic,json_dumps_params={'ensure_ascii':False})

 

五,视图层之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)
		# 支持列表形式(后面需要添加save=False)
		return JsonResponse(ll,safe=False)

六,CBV和FBV

1,基于类的视图

在路由层需要更改的:
url(r'^test/', views.Test.as_view())
视图层导入
from django.views import View
class Test(View):
    def get(self,request):
        return HttpResponse('get-test')
    def post(self, request):
        return HttpResponse('post-test')

2,基于函数的视图

七,简单的文件上传

前端:

<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')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值