Django的文件上传以及中间键

1、图片的上传

案例:用户注册图片上传

1、设计模型

u_name	用户名
u_age	密码
u_img	头像
# 保存头像--本质上保存的是文件的路径
# 目录:static/upload/icon
# upload_to	表示指定图片上传的相对路径名,及文件上传的额路径的前缀

class User(models.Model):
    u_name = models.CharField(max_length=50)
    u_age = models.IntegerField(default=17)
    u_img = models.ImageField(upload_to='icon')

注意:上传目录需要配置后才能使用
	1、在static目录下创建文件上传放置目录upload
	2、在setting中配置
		在setting的后面追加:
		MEDIA_ROOT = os.path.join(BASE_DIR,'static/upload')

2、表单

1、上传文件的标签:
头像:<input type="file" name="img">
2、表单提交需要用post请求,还需要设置数据的编码类型
<form action="{% url 'doimgupload' %}" method="post" enctype="multipart/form-data">
3、服务器处理:
	1、文件的接收
	# 获取文件数据
	data = request.FILES.get("key")
	2、保存到数据库
	user.u_img = data    直接设置file获取的值即可,django会自动的处理
4、展示数据库存储的图片

def getImg(request):
    # 获取头像
    user = User.objects.filter(u_name='玛花').first()
    # 获取图片的路径
    imgPath = '/static/upload/'+ user.u_img.url
    data = {
        'imgPath':imgPath
    }

    return render(request,'getimg.html',context=data)

2、自定义文件上传

def doimgUpload(request):
    # 获得文件
    uploadFile = request.FILES.get('img')
    # 文件的写入操作
    # 服务器文件的名字通常唯一的
    #设置文件名及上传路径
    filePath = os.path.join(settings.MEDIA_ROOT,createFileName()+'.jpg')
    # 以写的方式打开文件
    with open(filePath,mode='wb') as wf:
    	# 将文件分成很多分写入
        for i in uploadFile.chunks():
            wf.write(i)
            wf.flush()


    return HttpResponse('上传成功')

3、中间键 middleware

概念:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程)

1、使用:

1、在项目的目录下新建目录middleware
2、在middleware目录下新建一个py文件 模块A
3、在模块A中定义一个中间键类B,B类需要继承MiddlewareMixin
4、在B类中重新对应流程的方法
5、需要在setting中配置
	在middleware中添加:目录名middleware.模块名A.类名B

2、常用的方法

1、def process_request(self,request):

该方法在进入url路由前执行,在该方法中可以使用 return 响应体来终止向后执行,直接响应客户端
所有的url请求都会执行它
场景:1、反爬虫	2、黑名单/白名单	3、vip区别
如:
	def process_request(self,request):
		print("***********************")
		# 获得访问地址
		print(request.path)
		# 获得访问用户的ip地址
		print(request.META["REMOTE_ADDR"])
		addr = request.META["REMOTE_ADDR"]
		# 黑名单
		if addr in ["10.31.160.24","10.31.160.229"]:
		    return HttpResponse("滚吧,不欢迎你")

2、def process_exception(self,request,exception):

该方法在出现异常的时候执行,在该方法中可以处理跳过异常,使程序不出错
def process_exception(self,request,exception):
        # 程序异常时,跳到首页
        return HttpResponse('假装跳到首页')

猜你喜欢

转载自blog.csdn.net/EverXerxes/article/details/82763211
今日推荐