飞行的猪哼哼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一:七牛云的使用:
1:安装七牛云:

pip install qiniu -i https://pypi.tuna.tsinghua.edu.cn/simple

2:初始化:AccessKey和SecretKey签名的授权:
注:AK与SK虚假

1:AK:   WzrwnBQ6hLKzA3H3jsLt66VwFru-KAZ91AGcg9ao39
2: SK :    SlnL8kEgvatZao5dhB88nLy-PAIkdd2GeaPJy7JB1-
3:	七牛云空间名字: homepicture

3:封装一个工具类:如果上传成功返回七牛云生成的图片的key,如果上传失败,抛出异常,调用的视图通过捕获异常决定是否上传成功。

ihome/utils/image_storage

from qiniu import Auth, put_file, etag
from qiniu import put_data
import qiniu.config


# 需要填写你的 Access Key 和 Secret Key
access_key = 'WzrwnBQ6hLKzA3H3jsLtVwFru-KAZ91AGcg9ao39'
secret_key = 'SlnL8kEgvatZao5dhBnLy-PAIkdd2GeaPJy7JB1-'


def storage(file_data):
    """
    上传文件到七牛服务器
    :param file_data: 要上传的文件数据
    :return:
    """

    # 构建鉴权对象
    q = Auth(access_key, secret_key)

    # 要上传的空间
    bucket_name = 'homepicture'

    # 生成上传 Token,可以指定过期时间等
    token = q.upload_token(bucket_name, None, 3600)


    ret, info = put_data(token, None, file_data)

    if info.status_code == 200:
        # 上传成功,返回图片的名字key
        return ret.get('key')
    else:
        # 上传失败,抛出异常
        raise Exception('上传七牛失败')

4:上传顾客头像视图:ihome/users/set_user_avatar_View

class set_user_avatar_View(View):

    def post(self, request):

        user = request.user
        # 1:提取参数
        image_file = request.FILES.get('avatar',None)

        # 2:校验参数
        if image_file is None:
            return JsonResponse({
                "code": 400,
                "errmsg": "图片没有输入,不能上传"
            }, status=400)

        # 3:数据处理---读取数据(二进制),上传到七牛云,将返回的地址,保存到数据库
        image_data = image_file.read()

        try:
            file_name = storage(image_data)

        except Exception as e:
            return JsonResponse({
                "code":400,
                "errmsg": "图片上传失败"
            })

        try:
            User.objects.filter(pk=user.id).update(avatar=file_name)

        except Exception as e:
            print(e)
            return JsonResponse({
                "code": 400,
                "errmsg": "图片保存失败"
            })
        avatar_url = constants.QINIU_DOMIN_PREFIX + file_name
        # avatar_url = "http://qglpphun0.hn-bkt.clouddn.com/" + file_name
        # 4:构建响应
        return JsonResponse({
            "errno": 0,
            "errmsg": "ok",
             "data": {"avatar_url": avatar_url},
        })

5:路由:

from django.urls import re_path
from . import views

urlpatterns = [ 
    re_path(r'^users$',views.RegisterView.as_view()),
    re_path(r'^session$',views.LoginView.as_view()),
    re_path(r'^user$',views.self_center_view.as_view()),
    re_path(r'^user/avatar$',views.set_user_avatar_View.as_view()),
]

6:修改配置:utils/constants.py

# 七牛空间域名
QINIU_DOMIN_PREFIX = "http://qglpphun0.hn-bkt.clouddn.com/"

7:上传房源图片:

from django.http import JsonResponse
from django.views import View
from ihome.utils import constants
from homes.models import House, HouseImage
from ihome.utils.image_storage import storage




class Hose_sourse_View(View):

    def post(self, request, house_id):
        print(house_id)
        # 1:提取参数
        image_file = request.FILES.get('house_image', None)
        # 2:校验参数
        if image_file is None:
            return JsonResponse({
                "errno": 400,
                "errmsg": "图片没有输入,不能上传"
            }, status=400)

        # 3:数据处理---读取数据(二进制),上传到七牛云,将返回的地址,保存到数据库
        image_data = image_file.read()

        try:
            file_name = storage(image_data)

        except Exception as e:
            return JsonResponse({
                "code": 400,
                "errmsg": "图片上传失败"
            })

        try:
            # house = HouseImage.objects.create(house=house_id, url=file_name)
            print(house_id)
            house = House.objects.get(pk=house_id)
            house.index_image_url = file_name
            house.save()

        except Exception as e:
            print(e)
            return JsonResponse({
                "code": 400,
                "errmsg": "图片保存失败"
            })

        url = constants.QINIU_DOMIN_PREFIX + file_name
        # 4:构建响应
        return JsonResponse({
            "data": {
                "url": url
            },
            "errno": "0",
            "errmsg": "图片上传成功",
        })

路由:

from django.urls import re_path

from homes import views

urlpatterns = [
   re_path(r'^houses/(?P<house_id>\d+)/images$', views.Hose_sourse_View.as_view()),
]

二:两个日期相减

days = datetime.datetime.strptime(end_date,'%Y-%m-%d') - datetime.datetime.strptime(start_date,'%Y-%m-%d')

这个days是个日期对象

days=days.days

days.days得到整数days

posted on 2020-09-15 15:16  飞行的猪哼哼  阅读(96)  评论(0)    收藏  举报