def wiki_upload(request, project_id): '''Wiki的文章中的图片''' # markdown上传文件需要的返回值类型 result = { 'success': 0, # 0代表失败; 1代表成功 'message': None, 'url': None, } # 获取markdown上传的文件对象 image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = '文件不存在' return JsonResponse(result) # 创建上传之后的文件名,由于腾讯云上传相同的文件名会覆盖原来文件,所以尽量保持文件名唯一 ext = image_object.name.rsplit('.')[-1] # 上传的文件后缀名 # uid是自定义的生成随机字符串的函数, key是新的文件名 key = '{}.{}'.format(uid(request.tracer.user.mobile_phone), ext) # 获取项目的桶名称 bucket_name = request.tracer.project.bucket region = request.tracer.project.region # 上传到腾讯云cos桶中 image_url = upload_file(bucket_name, region, image_object, key) result['success'] = 1 result['url'] = image_url result['message'] = '上传成功' return JsonResponse(result)
def issues_invite(request, project_id): """创建邀请码并返回给前端""" form = InviteModelForm(request.POST) if form.is_valid(): # todo 校验用户选中的邀请人数是否在额度范围内 # 1、只有项目的创建者才能发送邀请链接 if not request.tracer.project.creator == request.tracer.user: form.add_error('period', '无权创建邀请码') return JsonResponse({'status': False, 'error': form.errors}) # 2、设置验证码 random_invite_code = uid( request.tracer.user.mobile_phone) # 使用用户手机号创建随机码 form.instance.creator = request.tracer.user form.instance.project = request.tracer.project form.instance.code = random_invite_code form.save() # 3、返回邀请码链接给前端,便于前端页面展示 url = "{scheme}://{host}{path}".format( scheme=request.scheme, host=request.get_host(), path=reverse('web:invite_join', kwargs={'code': random_invite_code})) return JsonResponse({'status': True, 'url': url}) return JsonResponse({'status': False, 'error': form.errors})
def pay(request): conn = get_redis_connection() key = 'payment_{}'.format(request.tracer.user.mobile_phone) context_string = conn.get(key) if not context_string: return redirect('price') context = json.loads(context_string.decode('utf-8')) # 1. 数据库中生成交易记录(待支付) # 等支付成功之后,我们需要把订单的状态更新为已支付、开始&结束时间 order_id = uid(request.tracer.user.mobile_phone) total_price = context['total_price'] models.Transaction.objects.create(status=1, order=order_id, user=request.tracer.user, price_policy_id=context['policy_id'], count=context['number'], price=total_price) # 生成支付链接 ali_pay = AliPay(appid=settings.ALI_APPID, app_notify_url=settings.ALI_NOTIFY_URL, return_url=settings.ALI_RETURN_URL, app_private_key_path=settings.ALI_PRI_KEY_PATH, alipay_public_key_path=settings.ALI_PUB_KEY_PATH) query_params = ali_pay.direct_pay( subject="trace rpayment", # 商品简单描述 out_trade_no=order_id, # 商户订单号 total_amount=total_price) pay_url = "{}?{}".format(settings.ALI_GATEWAY, query_params) return redirect(pay_url)
def invite_url(request, project_id): """ 生成邀请码 :param request: :param project_id: :return: """ form = InviteModelForm(data=request.POST) if form.is_valid(): """ 1、创建随机的邀请码 2、验证码保存到数据库 3、限制:只有创建者才能邀请 """ if request.tracer.user != request.tracer.project.creator: # 当前用户不是项目的创建者不能进行邀请 form.add_error("period", "无权创建邀请码") # 有效期下面提示 return JsonResponse({"status": False, "error": form.errors}) random_invite_code = uid(request.tracer.user.mobile_phone) form.instance.project = request.tracer.project form.instance.code = random_invite_code form.instance.creator = request.tracer.user form.save() # 将验证码返回给前段,前段页面上展示出来。 url = "{scheme}://{host}{path}".format( scheme=request.scheme, # 获取http或者https host=request.get_host(), # 主机IP和端口 path=reverse("invite_join", kwargs={"code": random_invite_code}) # 反向生成url格式 /invite/join/asdfadiqr-9asudfapsef/ ) return JsonResponse({"status": True, "data": url}) return JsonResponse({"status": False, "error": form.errors})
def invite_url(request, project_id): """ 生成邀请码 """ form = InviteModelForm(data=request.POST) if form.is_valid(): """ 1. 创建一个随机的邀请码 2. 验证码保存到数据库 3. 只有创建者才能邀请,其他成员无法创建 """ if request.tracer.user != request.tracer.project.creator: form.add_error('period', '没有权限创建邀请码') return JsonResponse({'status': False, 'error': form.errors}) random_invite_code = uid(request.tracer.user.mobile_phone) form.instance.project = request.tracer.project form.instance.code = random_invite_code form.instance.creator = request.tracer.user form.save() # 邀请码返回前端,前端展示验证码 url = '{scheme}://{host}{path}'.format( scheme=request.scheme, # 访问的方法 host=request.get_host(), # 返回域名和端口 path=reverse('invite_join', kwargs={'code': random_invite_code})) return JsonResponse({'status': True, 'data': url}) return JsonResponse({'status': False, 'error': form.errors})
def wiki_upload(request, project_id): """ markdown插件上传图片 """ result = { 'success': 0, 'message': None, 'url': None, } image_object = request.FILES.get('editormd-image-files') if not image_object: result['message'] = "文件不存在" return JsonResponse(result) ext = image_object.name.rsplit('.')[-1] # 获取文件后缀名 key = "{}.{}".format(uid(request.tracer.user.mobile_phone), ext) # 文件对象上传到当前项目的桶中 image_url = upload_file( bucket=request.tracer.project.bucket, region=request.tracer.project.region, file_object=image_object, key=key, ) print(image_url) result = { 'success': 1, 'message': None, 'url': image_url, } print(result) print(JsonResponse(result)) return JsonResponse(result)
def wiki_upload(request, project_id): """ markdown插件上传图片 """ # markdown上传文件到我后台,后台上传至对象存储,返回成功信息和图片URL给Markdown # markdown给我们展示出来 result = { # g给markdown返回的信息,success=0表示失败 'success': 0, 'message': None, 'url': None } # 上传的文件统一的key为editormd-image-file,valuel为文件对象 image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = "文件不存在" return JsonResponse(result) # 给图片设置一个不重复的名字 ext = image_object.name.rsplit('.')[-1] # 获取图片后缀 key = "{}.{}".format(uid(request.tracer.user.mobile_phone), ext) # 上传至对象存储后返回url:image_url image_url = upload_file( request.tracer.project.bucket, request.tracer.project.region, image_object, key ) result['success'] = 1 result['url'] = image_url # 给markdown返回 return JsonResponse(result)
def pay(request): conn = get_redis_connection() key = 'payment_{}'.format(request.tracer.user.mobile_phone) context_string = conn.get(key) if not context_string: return redirect('price') context = json.loads(context_string.decode('utf-8')) # 1. 数据库中生成交易记录(待支付) # 等支付成功之后,我们需要把订单的状态更新为已支付、开始&结束时间 order_id = uid(request.tracer.user.mobile_phone) total_price = context['total_price'] Transaction.objects.create(status=1, order=order_id, user=request.tracer.user, price_policy_id=context['policy_id'], count=context['number'], pay_price=total_price) # 付款后的回调 callback_url = 'http://' + settings.WEB_ADDRESS + ':' + settings.WEB_HOST + reverse( 'web:pay_notify') payment = AliPayment(appid=settings.APPID) pay_url = payment.get_pay(order_id, total_price, 'trace payment', return_url=callback_url, notify_url=callback_url) return redirect(pay_url)
def wiki_upload(request, project_id): """ markdown插件上传图片 """ # markdown需要的返回值 判断上传是否成功 result = { 'success': 0, 'message': None, 'url': None } image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = "文件不存在" return JsonResponse(result) ext = image_object.name.rsplit('.')[-1] key = "{}.{}".format(uid(request.tracer.user.phone), ext) image_url = upload_file( request.tracer.project.bucket, request.tracer.project.region, image_object, key ) result['success'] = 1 result['url'] = image_url return JsonResponse(result)
def invite_url(request, project_id): """ 生成邀请码 """ form = InviteModelForm(data=request.POST) if form.is_valid(): """ 1. 创建随机的邀请码 2. 验证码保存到数据库 3. 限制:只有创建者才能邀请 """ if request.tracer.user != request.tracer.project.creator: form.add_error('period', "无权创建邀请码") return JsonResponse({'status': False, 'error': form.errors}) random_invite_code = uid(request.tracer.user.mobile_phone) form.instance.project = request.tracer.project form.instance.code = random_invite_code form.instance.creator = request.tracer.user form.save() # 将验邀请码返回给前端,前端页面上展示出来。 url = "{scheme}://{host}{path}".format( scheme=request.scheme, host=request.get_host(), path=reverse('invite_join', kwargs={'code': random_invite_code})) return JsonResponse({'status': True, 'data': url}) return JsonResponse({'status': False, 'error': form.errors})
def pay(request): '''封装后''' # 拿出数据校验 conn = get_redis_connection() key = 'payment_{}'.format(request.saas.user.phone) context_string = conn.get(key) if not context_string: return redirect('price') context = json.loads(context_string.decode('utf-8')) # 1.数据库生成交易记录(待支付), order_id = uid(request.saas.user.phone) # 根据手机号生成随机字符串 total_price = context['total_price'] Transaction.objects.create(status=1, order=order_id, user=request.saas.user, price_policy_id=context['policy_id'], count=context['number'], price=total_price) # 生成支付宝链接 ali_pay = AliPay(appid=settings.ALI_APPID, app_notify_url=settings.ALI_NOTIFY_URL, return_url=settings.ALI_RETURN_URL, app_private_key_path=settings.ALI_PRI_KEY_PATH, alipay_public_key_path=settings.ALI_PUB_KEY_PATH) query_params = ali_pay.direct_pay( subject="Saas 系统会员", # 商品简单描述 out_trade_no=order_id, # 商户订单号 total_amount=total_price) pay_url = "{}?{}".format(settings.ALI_GATEWAY, query_params) return redirect(pay_url)
def invite_url(request, project_id): """生成邀请码""" form = InviteModelForm(data=request.POST) if form.is_valid(): """ 表单验证通过后: 1、只有创建者才能邀请 的限制 2、创建随机邀请码 3、验证码保存到数据库 """ if request.lxyker.user != request.lxyker.project.creator: form.add_error('period', '没有权限') return JsonResponse({'status': False, 'errors': form.errors}) random_invite_code = uid(request.lxyker.user.mobile_phone) form.instance.project = request.lxyker.project form.instance.code = random_invite_code form.instance.creator = request.lxyker.user form.save() # 邀请码保存到数据库 # 邀请码返回给前端 url = '{scheme}://{host}{path}'.format( scheme=request.scheme, host=request.get_host(), path=reverse('invite_join', kwargs={'code': random_invite_code}), ) return JsonResponse({'status': True, 'data': url}) return JsonResponse({'status': False, 'error': form.errors})
def wiki_upload(request, project_id): """wiki中上传文件""" img_obj = request.FILES.get('editormd-image-file') img_format = img_obj.name.rsplit('.')[-1] img_key = '{}.{}'.format(uid(request.tracer.user.mobile_phone), img_format) img_url = upload_file( bucket=request.tracer.project.bucket, # 该项目的储存桶 region=request.tracer.project.region, key=img_key, obj=img_obj) print('完成上传', img_url) result = {'success': 1, 'message': None, 'url': img_url} return JsonResponse(result)
def invite_url(request, project_id): form = InviteModelForm(data=request.POST) if form.is_valid(): if request.tracer.user != request.tracer.project.creator: form.add_error('period', '无权创建邀请码') return JsonResponse({'status': False, 'error': form.errors}) random_invite_code = uid(request.tracer.user.phone) form.instance.project = request.tracer.project form.instance.code = random_invite_code form.instance.creator = request.tracer.user form.save() url_path = reverse('web:invite_join', kwargs={'code': random_invite_code}) url = f'{request.scheme}://{request.get_host()}{url_path}' return JsonResponse({'status': True, 'data': url}) return JsonResponse({'status': False, 'error': form.errors})
def wiki_upload(request, project_id): '''markdown插件上传图片''' result = {'success': 0, 'message': None, 'url': None} image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = '文件不存在' return JsonResponse(result) # 将文件对象上传到项目桶中 ext = image_object.name.split('.')[-1] key = '{}.{}'.format(uid(request.saas.user.phone), ext) image_url = upload_file(request.saas.project.bucket, request.saas.project.region, image_object, key) result['success'] = 1 result['url'] = image_url return JsonResponse(result)
def wiki_upload(request, project_id): result = {'success': 0, 'message': None, 'url': None} #print(request.FILES) #<MultiValueDict: {'editormd-image-file': [<InMemoryUploadedFile: x战警二.jpeg (image/jpeg)>]}> image_obj = request.FILES.get('editormd-image-file') if not image_obj: result['message'] = "文件不存在" return JsonResponse(result) # key文件名 ext文件后缀名 ext = image_obj.name.rsplit('.')[-1] key = "{}.{}".format(uid(request.userInfo.user.telephone), ext) image_url = upload_file(request.userInfo.project.bucket, request.userInfo.project.region, image_obj, key) print(image_url) result['success'] = 1 result['url'] = image_url return JsonResponse(result)
def wiki_upload(request, project_id): print('收到图片') result = {'success': 0, 'message': None, 'url': None} image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = '文件不存在' return JsonResponse(result) ext = image_object.name.rsplit('.')[-1] key = "{}.{}".format(uid(request.blog.user.mobile_phone), ext) image_url = upload_file( bucket=request.blog.project.bucket, region=request.blog.project.region, file_object=image_object, key=key, ) result['success'] = 1 result['url'] = image_url return JsonResponse(result)
def wiki_upload(request, project_id): """" markdown上传图片 """ result = {'success': 0, 'message': None, 'url': None} # 获取markdown要上传的图片对象 img_obj = request.FILES.get('editormd-image-file') if not img_obj: result['message'] = "选择的对象不存在" return JsonResponse(result) ext = img_obj.name.rsplit('.')[-1] key = "{}.{}".format(encrypt.uid(request.tracer.user.mobile_phone), ext) # 调用上传图片函数,返回上传成功后cos查看图片的url img_url = cos_upload(bucket=request.tracer.project.bucket, region=request.tracer.project.region, file_obj=img_obj, key=key) result['success'] = 1 result['url'] = img_url # response.setHeader("X-Frame-Options", "SAMEORIGIN"); // 解决IFrame拒绝的问题 return JsonResponse(result)
def wiki_upload(request, project_id): """markdown插件上传图片""" result = {"success": 0, "message": None, "url": None} # 用户上传的图片对象 image_object = request.FILES.get("editormd-image-file") if not image_object: result["message"] = "文件不存在" return JsonResponse(result) # 上传到cos中的文件名不能重复,如果重复最新的会覆盖就文件,所有这里需要生成唯一数的文件名 ext = image_object.name.rsplit(".")[-1] # 获取上传文件后缀名 key = "{0}.{1}".format(uid(request.tracer.user.mobile_phone), ext) image_url = upload_file( bucket=request.tracer.project.bucket, # 文件对象上传到当前项目的桶中 region=request.tracer.project.region, file_object=image_object, key=key) result["success"] = 1 result["url"] = image_url return JsonResponse(result)
def wiki_upload(request, project_id): """MarkDown插件是上传图片""" result = {"success": 0, "message": None, "url": None} image_obj = request.FILES.get("editormd-image-file") if image_obj: # 将图片对象,上传到桶中 bucket = request.tracer.project.bucket ext = image_obj.name.rsplit('.')[-1] image_name = "{}.{}".format(uid(request.tracer.user.phone), ext) image_url = upload_image(TENCENT_COS_REGION, bucket, image_obj, image_name) # 将图片上传到桶之后,返回数据到MarkDown result["success"] = 1 result["url"] = image_url return JsonResponse(result) result["message"] = "文件不存在!" return JsonResponse(result)
def pay(request): """生成订单 并且 实现支付宝支付""" conn = get_redis_connection('default') key = 'payment_{}'.format(request.tracer.user.mobile_phone) context_string = conn.get(key) if not context_string: return redirect(reverse('web:price')) context = json.loads(context_string.decode('utf-8')) # 1、数据库中生成交易记录, 应该是未支付状态 # 支付成功之后,需要把订单的状态更新为以及支付, 设置开始和结束时间 # 先创建订单编号 time_str = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) # 时间戳格式化 order_id = time_str + uid(request.tracer.user.mobile_phone) total_price = context['total_price'] models.Transaction.objects.create( status=1, order=order_id, user=request.tracer.user, price_policy_id=context['policy_id'], count=context['number'], price=total_price ) # 2、生成支付链接 # 生成支付链接 ali_pay = AliPay( appid=settings.ALI_APPID, app_notify_url=settings.ALI_NOTIFY_URL, return_url=settings.ALI_RETURN_URL, app_private_key_path=settings.ALI_PRI_KEY_PATH, alipay_public_key_path=settings.ALI_PUB_KEY_PATH ) query_params = ali_pay.direct_pay( subject="tracer payment", # 商品简单描述 out_trade_no=order_id, # 商户订单号 total_amount=total_price ) pay_url = "{}?{}".format(settings.ALI_GATEWAY, query_params) return redirect(pay_url)
def wiki_upload(request, project_id): """ markdown插件上传图片 """ result = {"success": 0, "message": None, "url": None} image_object = request.FILES.get("editormd-image-file") if not image_object: result["message"] = "文件不存在" return JsonResponse(result) ext = image_object.name.rsplit(".")[-1] key = "{}.{}".format(uid(request.tracker.user.mobile_phone), ext) image_url = upload_file( request.tracker.project.bucket, request.tracker.project.region, image_object, key, ) result["success"] = 1 result["url"] = image_url return JsonResponse(result)
def issues_invite(request, project_id): """ 生成邀请码 """ form = InviteForm(data=request.POST) if form.is_valid(): # 限制:只有创建者才能生成邀请码 if request.tracer.user != request.tracer.project.creator: form.add_error('period', '只有项目创建者才可以生成邀请码') return JsonResponse({"status": False, "error": form.errors}) invite_code = uid(request.tracer.user.mobile_phone) form.instance.project = request.tracer.project form.instance.code = invite_code form.instance.creator = request.tracer.user form.save() # 将验证码生成的url返回前端 拼接url url = "{scheme}://{host}{code}".format( scheme=request.scheme, host=request.get_host(), code=reverse('web:invite_join', kwargs={'code': invite_code})) return JsonResponse({"status": True, "data": url}) return JsonResponse({"status": False, "error": form.errors})
def wiki_upload(request, project_id): result = { 'success': 0, 'message': None, 'url': None } img_obj = request.FILES.get('editormd-image-file') if not img_obj: result['message'] = '文件不存在' return JsonResponse(result) ext = img_obj.name.rsplit('.')[-1] key = '{}.{}'.format(uid(request.auth.user.phone_num), ext) img_url = upload_file( request.auth.project.bucket, request.auth.project.region, img_obj, key ) result['success'] = 1 result['url'] = img_url return JsonResponse(result)
def pay(request): """ 生成订单,支付宝支付页面 """ conn = get_redis_connection() key = 'payment_{}'.format(request.tracer.user.mobile_phone) context_string = conn.get(key) if not context_string: return redirect('price') context = json.loads(context_string.decode('utf-8')) # 1 数据库中生成交易记录, 支付成功后订单状态更新为已支付,且需要添加开始和结束的时间 order_id = uid(request.tracer.user.mobile_phone) pay_price = context['pay_price'] models.Transaction.objects.create( status=1, order=order_id, user=request.tracer.user, price_policy_id=context['price_id'], count=context['number'], price=pay_price, ) ali_pay = AliPay( appid=settings.ALI_APPID, app_notify_url=settings.ALI_NOTIFY_URL, app_private_key_path=settings.ALI_PRIVATE_KEY_PATH, alipay_public_key_path=settings.ALI_PUBLIC_KEY_PATH, return_url=settings.ALI_RETURN_URL, ) query_params = ali_pay.direct_pay( subject='tracer payment', out_trade_no=order_id, total_amount=pay_price, ) pay_url = '{}?{}'.format(settings.ALI_GATEWAY, query_params) return redirect(pay_url)
def upload(request, project_id): result = { 'success': 0, 'message': None, 'url': None } img_obj = request.FILES.get('editormd-image-file') if not img_obj: result['message'] = '文件不存在' return JsonResponse(result) # 文件的对象上传到桶 bucket = request.tracer.project.bucket body = img_obj ext = img_obj.name.rsplit('.')[-1] filename = '%s.%s' % (uid(request.tracer.user.mobile_phone), ext) url = upload_file(bucket, body, filename) result['success'] = 1 result['url'] = url return JsonResponse(result)
def pay(request): """生成订单+支付宝支付""" # 直接从redis中取出要支付的订单信息 conn = get_redis_connection() key = 'payment_{}'.format(request.lxyker.user.mobile_phone) context = conn.get(key) if not context: return redirect('price') context = json.loads(context.decode('utf-8')) # 1、数据库中生成交易记录(待支付) order_id = uid(request.lxyker.user.mobile_phone) total_price = context['total_price'] models.Transaction.objects.create( status=1, order=order_id, user=request.lxyker.user, price_policy_id=context['policy_id'], count=context['number'], price=total_price, ) # 2、跳转到支付宝链接进行支付: ali_pay = AliPay( appid=settings.ALI_APPID, app_notify_url=settings.ALI_NOTIFY_URL, return_url=settings.ALI_RETURN_URL, app_private_key_path=settings.ALI_PRI_KEY_PATH, alipay_public_key_path=settings.ALI_PUB_KEY_PATH, ) query_params = ali_pay.direct_pay( subject="lxyker payment", # 商品简单描述 out_trade_no=order_id, # 商户订单号 total_amount=total_price ) pay_url = "{}?{}".format(settings.ALI_GATEWAY, query_params) return redirect(pay_url)
def upload_file(request, files_object): """ 调用腾讯对象存储 """ #h获取文件名后缀 ext = files_object.name.split('.')[-1] #根据用户手机号和文件名后缀生成随机的文件名称,防止上传重复文件 files_name = "{}.{}".format(uid(request.tracer.user.mobile_phone), ext) print(files_name) logging.basicConfig(level=logging.INFO, stream=sys.stdout) config = CosConfig(Region=request.tracer.project.region, SecretId=settings.TENCENT_COS_ID, SecretKey=settings.TENCENT_COS_KEY) # 2. 获取客户端对象 client = CosS3Client(config) response, url = client.upload_file_from_buffer( Body=files_object, # 文件对象 Bucket=request.tracer.project.bucket, # 数据库中保存得桶名称 Key=files_name, # 保存的文件名称 ) return url
def wiki_upload(request, project_id): """ markdown上传图片 :param request: :return: """ result = { 'success': 0, 'message': None, 'url': None, } image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = '文件不存在' return JsonResponse(result) ext = image_object.name.rsplit('.')[-1] key = '{}.{}'.format(uid(request.tracer.user.mobile_phone), ext) image_url = upload_file(request.tracer.project.bucket, request.tracer.project.region, image_object, key) # markdown固定格式 result['success'] = 1 result['url'] = image_url return JsonResponse(result)
def wiki_upload(request, project_id): """ markdown 本地上传 :param request: :param project_id: :return: """ result = { 'success': 0, 'message': None, 'url': None } print('收到上传的图片了') print(request.FILES) # 文件对象上传到当前项目的桶中 image_object = request.FILES.get('editormd-image-file') if not image_object: result['message'] = "文件不存在" return JsonResponse(result) ext = image_object.name.rsplit('.')[-1] key = "{}.{}".format(uid(request.tracer.user.mobile_phone),ext) image_url = upload_file( request.tracer.project.bucket, request.tracer.project.region, image_object, key ) print(image_url) # return JsonResponse({}) result['success'] = 1 result['url'] = image_url # return JsonResponse(result)