一:七牛云的使用:
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
浙公网安备 33010602011771号