# 上傳頭像業務邏輯函數,封裝函數,代碼複用
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/')
注意:以上內容是個人使用的隨手記錄, 就是介紹了下簡單的使用
歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!
---------------------------------------------------------------------------------------
搞笑:能動手就儘量別吵吵