# 上传头像业务逻辑函数,封装函数,代码复用
def upload(request,file):
if file.size/1024/1024 < 2: # 判断文件上传大小
if file.content_type == 'image/jpeg' or file.content_type == 'image/gif': # 判断文件类型指定是这两种格式
# 把文件存到服务器上
# 按照文件名的.进行分割,然后取最后一项后缀名与唯一标识符(uuid)拼接成文件名
new_name = str(uuid.uuid4())+'.'+file.name.split('.')[-1]
fname = 'upload/avatar/' + new_name # 文件路径加文件名字
dirname = os.path.dirname(fname) # 获取路径名称
if not os.path.exists(dirname): # 如果路径不存在则创建
os.makedirs(dirname) # 创建多级目录
with open(fname,'wb') as f:
if file.multiple_chunks(): # 判断是否是多块文件
for chunk in file.chunks(): # 遍历文件的所有块
f.write(chunk) # 写入多块文件
else:
f.write(file.read()) # 写入单块文件
return True,new_name # 上传成功返回True 和 文件的新名字
else:
return False,'文件类型只能是jpeg或者gif' # 返回上传不成功和错误信息和
else:
return False,'上传文件不能超过2M' # 返回上传不成功,并提示错误信息
# 添加学生页业务逻辑
def add_stu(request):
clsall = models.Clases.objects.all() # 获取所有班级数据
# 获取输入框的值
if request.method == 'POST':
name = request.POST.get('stu_name',None)
age = request.POST.get('age',None)
gender = request.POST.get('gender',None)
score = request.POST.get('score',None)
email = request.POST.get('email',None)
# 获取班级id
cid = request.POST.get('clases', None)
# 上传头像业务逻辑部分
avatar = request.FILES.get('avatar', None) # 获取上传头像的输入框
# 准备上传
if avatar is not None: # 判断如果不为空
res = upload(request, avatar) # 调用自己写的上传函数
if res[0] is False: # 如果上传失败返回错误信息
return render(request,'pro01/upd_stu.html',{'error':res[1],'clsall':clsall})
else: # 上传成功
new_name = res[1] # 获取返回的文件名字
stu_info = {
'name':name,
'age':age,
'score':score,
'gender':gender,
'email':email,
'cls_id':cid,
'avatar':'avatar/' + new_name
}
# 将获取到的数据框的值修改后插入数据库
models.Student.objects.create(**stu_info)
# 响应的页面
return HttpResponseRedirect('/pro01/')
else:
# 获取所有班级
clases = models.Clases.objects.all()
# 添加选中的clases
return render(request,'pro01/add_stu.html',{'add_stu':'active','clases':clases})
# 修改学生信息业务逻辑
def upd_stu(request):
stu_id = request.GET.get('sid',None) # 获取点击修改链接的id
clsall = models.Clases.objects.all() # 获取班级的所有数据
# 显示页面必须得先使用一次get方法
if request.method == 'GET':
row = models.Student.objects.get(pk=stu_id) # 获取当前对应id的一行数据
# 响应显示所有对应id的数据
return render(request,'pro01/upd_stu.html',{'row':row,'clsall':clsall})
elif request.method == 'POST':
name = request.POST.get('stu_name', None)
age = request.POST.get('age', None)
gender = request.POST.get('gender', None)
score = request.POST.get('score', None)
email = request.POST.get('email', None)
# 获取班级id
cls_id = request.POST.get('clases', None)
# 上传头像业务逻辑部分
avatar = request.FILES.get('avatar', None) # 获取上传头像的输入框
print avatar
# print avatar.content_type
# 准备上传
if avatar is not None: # 判断如果不为空
res = upload(request, avatar) # 调用自己写的上传函数
if res[0] is False: # 如果上传失败返回错误信息
return render(request, 'pro01/upd_stu.html', {'error': res[1],'clsall':clsall})
else: # 上传成功
new_name = res[1] # 获取返回的文件名字
context = {
'name':name,
'age' : age,
'gender':gender,
'score':score,
'email':email,
'cls_id':cls_id,
'avatar':'avatar/'+new_name # 修改的时候把头像地址存入数据库
}
models.Student.objects.filter(pk=stu_id).update(**context)
return HttpResponseRedirect('/pro01/')
else:
return HttpResponse('fuck')
# 删除学生信息业务逻辑
def del_stu(request):
stu_id = request.GET.get('sid',None)
models.Student.objects.filter(pk = stu_id).delete()
return HttpResponseRedirect('/pro01/')
注意:以上内容是个人使用的随手记录, 就是介绍了下简单的使用
欢迎大家来吐槽,准备好瓜子饮料矿泉水,开整!!!
---------------------------------------------------------------------------------------
搞笑:能动手就尽量别吵吵