Django框架之views(業務邏輯)簡單後臺上傳頭像,添加信息,修改信息,刪除信息業務邏輯詳細描述

# 上傳頭像業務邏輯函數,封裝函數,代碼複用
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/')

注意:以上內容是個人使用的隨手記錄, 就是介紹了下簡單的使用

歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!

---------------------------------------------------------------------------------------

搞笑:能動手就儘量別吵吵


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章