Ejemplo n.º 1
0
 def get(self, request):
     access_key = settings.QINIU_ACCESS_KEY
     secret_key = settings.QINIU_SECRET_KEY
     q = qiniu.Auth(access_key, secret_key)
     bucket = settings.QINIU_BUCKET_NAME
     token = q.upload_token(bucket)
     return restful.result(data={'token': token})
Ejemplo n.º 2
0
def solution_list(request):
    '''
        需要参数有:
            1. 页数(p)
            2. 结果
            3. 可选
                1)用户
    '''
    page = int(request.GET.get('p', 1))
    user_id = int(request.GET.get('user_id', 0))
    result = int(request.GET.get('result', 11))
    start = (page - 1) * settings.ONE_PAGE_SUBMISSION_COUNT
    end = start + settings.ONE_PAGE_SUBMISSION_COUNT

    if result == 11:
        if user_id == 0:
            solutions = Solution.objects.all()[start:end]
        else:
            solutions = Solution.objects.filter(user_id=user_id)[start:end]
    else:
        if user_id == 0:
            solutions = Solution.objects.filter(result=result)[start:end]
        else:
            solutions = Solution.objects.filter(user_id=user_id, result=result)
    serializer = SolutionListSerializer(solutions, many=True)
    data = serializer.data
    return restful.result(data=data)
Ejemplo n.º 3
0
def course_token(request):
    """
    生成前端视频播放所需要的token
    :param request:
    :return: token
    """
    file = request.GET.get('video') # 这里的file是一个完整的视频链接地址
    course_id = request.GET.get('course_id')
    exists = CourseOrder.objects.filter(course_id=course_id, buyer=request.user, status=2).exists()  # 处理用户是否购买课程的逻辑
    if not exists:
        return restful.param_error(message='请先购买该课程!')

    expired_time = int(time.time()) + 2 * 60 * 60
    USER_ID = settings.BAIDU_CLOUD_USER_ID
    USER_KEY = settings.BAIDU_CLOUD_USER_KEY

    # 获取的file的地址url如下
    # file=http://hemvpc6ui1kef2g0dd2.exp.bcevod.com/mda-igjsr8g7z7zqwnav/mda-igjsr8g7z7zqwnav.m3u8
    # 1.获取地址url中的文件名的扩展名
    # 2.去除扩展名,获取文件名
    extension = os.path.splitext(file)[1] # 将文件名和扩展名分离: (filename, extension)
    media_id = file.split('/')[-1].replace(extension, '') # 获取二进制文件名: mda-igjsr8g7z7zqwnav

    # 将user_key编码成utf8格式
    key = USER_KEY.encode('utf-8')
    message = '/{0}/{1}'.format(media_id, expired_time).encode('utf-8')

    # 数字签名
    signature = hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()
    token = '{0}_{1}_{2}'.format(signature, USER_ID, expired_time)

    return restful.result(data={'token': token})
Ejemplo n.º 4
0
def qntoken(request):
    access_key = settings.QINIU_ACCESS_KEY
    seceret_key = settings.QINIU_SECERET_KEY
    bucket = settings.QINIU_BUCKET_NAME
    q = qiniu.Auth(access_key, seceret_key)
    token = q.upload_token(bucket)
    return restful.result(data={'token': token})
Ejemplo n.º 5
0
def news_list(request):
    """
    首页新闻展示,每次点击查看更多加载2(settings中指定的数量)篇文章
    :param request:新闻的页数
    :return:
    设置新闻的页数是通过地址栏中的查询字符串来传递 news/list/?p=1
    """
    page = int(request.GET.get('p', 1))
    # 分类为0 表示当不进行任何筛选 默认按照时间进行排序
    category_id = int(request.GET.get('category_id', 0))

    start = (page - 1) * settings.ONE_PAGE_NEWS_COUNT
    end = start + settings.ONE_PAGE_NEWS_COUNT

    if category_id == 0:
        # 如果没有选择分类,默认是最新分类,查询展示所有分类
        newses = News.objects.select_related('category',
                                             'author').all()[start:end]
    else:
        # 查询指定分类id
        newses = News.objects.select_related(
            'category', 'author').filter(category__id=category_id)[start:end]

    # 使用rest_framework框架对查询的数据进行序列化,主要对返回使用外键查询的字段
    # 因为newses是查询出来的多个数据,是QuerySet对象,所以要添加many=True
    serializer = NewsSerializer(newses, many=True)
    data = serializer.data
    return restful.result(data=data)
Ejemplo n.º 6
0
def course_token(request):
    video_url = request.GET.get('video_url')
    course_id = request.GET.get('course_id')

    buyed = CourseOrder.objects.filter(course=course_id,
                                       buyer=request.user,
                                       status=2).exists()
    if not buyed:
        return restful.params_error(message='请先购买课程!')

    expiration_time = int(time.time()) + 2 * 60 * 60

    USER_ID = settings.BAIDU_CLOUD_USER_ID
    USER_KEY = settings.BAIDU_CLOUD_USER_KEY

    # file=http://hemvpc6ui1kef2g0dd2.exp.bcevod.com/mda-igjsr8g7z7zqwnav/mda-igjsr8g7z7zqwnav.m3u8
    extension = os.path.splitext(video_url)[1]
    media_id = video_url.split('/')[-1].replace(extension, '')

    # unicode->bytes=unicode.encode('utf-8')bytes
    key = USER_KEY.encode('utf-8')
    message = '/{0}/{1}'.format(media_id, expiration_time).encode('utf-8')
    signature = hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()
    token = '{0}_{1}_{2}'.format(signature, USER_ID, expiration_time)
    return restful.result(data={'token': token})
Ejemplo n.º 7
0
def banner_list(request):

    # 序列化数据
    banners = Banner.objects.all()
    serialize = BannerSerializer(banners, many=True)

    return restful.result(data=serialize.data)
Ejemplo n.º 8
0
def upload_file(request):
    uploadFileObj = request.FILES['myFile']
    uploadFileName = "dataResource/" + uploadFileObj.name
    MScode = request.POST.get("types")
    print("MScode: " + MScode)
    print(uploadFileName)
    with open(uploadFileName, 'wb') as saveFile:
        for chunk in uploadFileObj.chunks():
            saveFile.write(chunk)
    f = open(uploadFileName, encoding='utf-8')
    data_json = json.load(f)
    code = 0
    sequenceNum = []
    data = xlrd.open_workbook('shandongdata.xlsx',
                              encoding_override='utf-8')  # 读取表
    for dataj in data_json:
        DisasterType, sqNumber = TransData(
            dataj["Code"])  # 解码ID,返回后七位的灾情信息码中的大类代码和子类代码
        code = DisasterType
        sequenceNum.append(sqNumber)
        dataj["ReportingUnit"] = MScode + "-" + dataj[
            "ReportingUnit"]  # 将编码MSCode加在reportingunit字段中
        disInfo = dataj["Code"]  # 获取19位编码
        dataj["Location"] = TransDataAddress(
            data, disInfo[0:12]
        )  # 获取19位ID的前十二位编码,即基础地理信息码  # 获取19位ID的前十二位编码,即基础地理信息码
        print("DisasterType:" + DisasterType)
        print("data:" + str(dataj))
    databaseOperation(code, data_json, sequenceNum)
    print('ok')
    return restful.result(message="upload success",
                          data={
                              "MScode": MScode,
                              "uploadFileName": uploadFileObj.name
                          })
Ejemplo n.º 9
0
def shoppingcart_list(request):
    name = request.GET.get('name')
    price = request.GET.get('price')
    product_item = Products.objects.filter(name=name, price=price)
    serializer = ProductsSerializer(product_item)
    data = serializer.data
    return restful.result(data=data)
Ejemplo n.º 10
0
def save_contract(request):
    form = ContractForm(request.POST)
    # print(request.POST.get('signature'))
    img = request.POST.get('signature').split('base64,')[1]
    print(img)
    img = base64.b64decode(img)
    file = open('media/test.png', 'wb')
    file.write(img)
    file.close()
    url = upload_image(file.name)
    print(url)
    re = requests.post(
        'http://localhost:8888/deploy?account=0xc01c805b559f4f71e1cec542c342ec7482b22cd1&password=123'
    )
    id = re.text
    if form.is_valid():
        print('表单检验成功')
        title = form.cleaned_data.get('title')
        content = request.POST.get('content')
        print(title)
        print(content)
        contract = Contract.objects.create(uid=id,
                                           title=title,
                                           content=content,
                                           signatureUrl_one=url)
        print(str(contract))
        return restful.result(data=contract.pk)
    else:
        return restful.params_error(message=form.errors)
Ejemplo n.º 11
0
def news_list_view(request):
    page = int(request.GET.get('p', 1))
    start = int((page - 1) * settings.ONE_PAGE_NEWS_COUNT)
    end = int(start + settings.ONE_PAGE_NEWS_COUNT)
    newses = News.objects.select_related('category', 'author').all()[start:end]
    serializer = NewsListSerializer(newses, many=True)
    return restful.result(data=serializer.data)
Ejemplo n.º 12
0
def news_list(request):
    username = request.session.get('user_name', '')
    parm = request.POST.get('parm')
    if not username:
        return redirect('/auth/login/')
    else:

        page = int(request.POST.get('page', 1))  # str  - 1     初始值为2
        # limit  从第几条数据开始 要取几条 # 一页只有1条
        # 0-1  1-2
        # 开始位置 结束位置 0 + (0+1) page+1 page=2  1 - (1+1=2 ) 2 - 3
        # page_start = settings.ONE_PAGE_NEWS_COUNT * (page - 1)
        # page_end = page_start + settings.ONE_PAGE_NEWS_COUNT
        # 如果是全部显示
        if parm == 'all':
            page_start = settings.ONE_PAGE_NEWS_COUNT * (page - 1)
            page_end = page_start + settings.ONE_PAGE_NEWS_COUNT
            newses = News.objects.all()[page_start:page_end]
        # 只显示我的文章
        elif parm == 'me':
            page_start = settings.ONE_PAGE_NEWS_COUNT * (page - 1)
            page_end = page_start + settings.ONE_PAGE_NEWS_COUNT
            newses = News.objects.filter(
                author_id=request.session.get('user_id'))[page_start:page_end]
        # 在搜索结果中显示
        else:
            page_start = settings.ONE_PAGE_NEWS_COUNT * (page - 1)
            page_end = page_start + settings.ONE_PAGE_NEWS_COUNT
            newses = newses = News.objects.filter(
                Q(title__contains=parm) | Q(content__icontains=parm)
                | Q(author__username__icontains=parm))[page_start:page_end]

        # 要同时序列化多条
        serializer = NewsSerializer(newses, many=True)
        return restful.result(data={"newses": serializer.data})
Ejemplo n.º 13
0
def news_list(request):
    # 通过p参数,来指定要获取第几页的数据
    # 并且这个p参数,是通过查询字符串的方式传过来的/news/list/?p=2
    # 如果没有url中没有给p参数,那默认返回第1页数据(且要变成整型,否则是字符串类型,那就不能做相加)
    page = int(request.GET.get('p', 1))
    # 分类为0:代表不进行任何分类,直接按照时间倒序排序
    category_id = int(request.GET.get('category_id', 0))
    # 点击加载更多按钮时要加载起始新闻和结束新闻
    # 0,1
    # 2,3
    # 4,5
    start = (page - 1) * settings.ONE_PAGE_NEWS_COUNT
    end = start + settings.ONE_PAGE_NEWS_COUNT
    # 如果category_id为0(即没有指定分类),就加载全部分类内容,否则只加载category_id所对应的分类内容
    if category_id == 0:
        # 这里不能通过value()来获取,它会得到一个列表,列表里面是字典,但是这个字典有很大的缺陷,
        # 比如我们想获取的新式如下(把category下所有信息获取到,1但是value()只是获取category下的id)
        # {'id':1,'title':'abc',category:{"id":1,'name':'热点'}}
        # 那这时候我们就要用到一个插件:django rest framework(如里面的序列化就可以将一个模型序列化成json形式的字符串,
        # 可以告诉它哪些字段要序列化,并且如category,不仅仅获取id还要获取其它信息(如name))
        newses = News.objects.select_related('category',
                                             'author').all()[start:end]
    else:
        newses = News.objects.select_related(
            'category', 'author').filter(category__id=category_id)[start:end]
    # 创建一个序列化,把newses传进去,由于newses中有很多新闻数据(queryset对象),所以要传many=True(表示有很多新闻数据都要去序列化)
    serializer = NewsSerializer(newses, many=True)
    # 拿到序列化后就可以通过erializer.data拿到序列化里的值
    data = serializer.data
    return restful.result(data=data)
Ejemplo n.º 14
0
def news_list(request):
    # 通过p参数,来指定要获取第几页的数据
    # 并且这个p参数,是通过查询字符串的方式传过来的/news/list/?p=2
    page = int(request.GET.get('p', 1))
    # 分类为0:代表提取所有新闻
    category_id = int(request.GET.get('category_id', 0))
    # 0,1
    # 2,3
    start = (page - 1) * settings.ONE_PAGE_NEWS_COUNT
    end = start + settings.ONE_PAGE_NEWS_COUNT

    if category_id == 0:
        # values()方法可以获取到字典,但是只能获取到外键的id,不能获取到分类和作者中的字段
        newses = News.objects.select_related('category',
                                             'author').all()[start:end]
    else:
        newses = News.objects.select_related(
            'category', 'author').filter(category__pk=category_id)[start:end]
        # 当字段是主键可以不写,直接写成下面这样
        # newses = News.objects.filter(category=category_id)
    # 我们可以用djangorestframework的序列化来解决这个问题,跟使用表单十分类似,many代表要序列多个值,因为newses中有多个值故设置成True
    serializer = NewsSerializer(newses, many=True)
    # 获取序列化后的数据
    data = serializer.data
    # print(type(data), data)
    # 使用json进行传输
    return restful.result(data=data)
Ejemplo n.º 15
0
def qntoken(request):
    access_key = 'SXJAGOM6nPxMAInwr3y5yy8cuGdQeIHIKsyMsvqt'
    secret_key = 'uoYTDGLeAbrzEcQRhuRyYhB_In8RF2ageTqE7QK4'
    q = qiniu.Auth(access_key, secret_key)
    bucket = 'dubbs'
    token = q.upload_token(bucket)
    return restful.result(data={'token': token})
Ejemplo n.º 16
0
def course_token(request):
    # 视频的 url
    file = request.GET.get("video")

    course_id = request.GET.get("course_id")

    if not CourseOrder.objects.filter(
            course_id=course_id, buyer=request.user, status=2).exists():
        return restful.params_error(message='请先购买课程! ')

    # token的过期时间 为两个小时
    expiration_time = int(time.time()) + 2 * 60 * 60

    USER_ID = settings.BAIDU_CLOUD_USER_ID
    USER_KEY = settings.BAIDU_CLOUD_USER_KEY

    # file = http://jmvi6gv2zgxb65v5f2r.exp.bcevod.com/mda-jmvih7nruwyfr5vv/mda-jmvih7nruwyfr5vv.m3u8
    # os.path.splitext 将url分为['http://jmvi6gv2zgxb65v5f2r.exp.bcevod.com/mda-jmvih7nruwyfr5vv/mda-jmvih7nruwyfr5vv','.m3u8']
    extension = os.path.splitext(file)[1]
    # 最终获得视频的media_id
    media_id = file.split('/')[-1].replace(extension, '')

    # 因为USER_KEY被加密生成signature 所以需要encode
    key = USER_KEY.encode('utf-8')

    message = '/{0}/{1}'.format(media_id, expiration_time).encode('utf-8')
    signature = hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()
    token = '{0}_{1}_{2}'.format(signature, USER_ID, expiration_time)

    return restful.result(data={'token': token})
Ejemplo n.º 17
0
def news_list(request):
    # 通过 p 参数,来指定获取的是第几页的数据
    # 并且,这个p参数,是通过查询字符串的方式,传过来的

    # 默认返回第一页的数据
    page = int(request.GET.get('p', 1))

    # 分类为0,表示不进行任何分类,直接按照时间倒序排序
    category_id = int(request.GET.get('category_id', 0))

    # 第一页,0,1
    # 第一页,2,3
    start = (page - 1) * settings.ONE_PAGE_NEWS_COUNT
    end = start + settings.ONE_PAGE_NEWS_COUNT

    if category_id == 0:
        # QuerySet对象,调用values(),得到列表,列表里面是字典
        # 这个不符合要求,有缺陷
        newses = News.objects.select_related('category',
                                             'author').all()[start:end]
    else:
        newses = News.objects.select_related(
            'category', 'author').filter(category_id=category_id)[start:end]

    serializer = NewsSerializer(newses, many=True)
    data = serializer.data

    print(data)

    # 将数据,返回给用户
    return restful.result(data=data)
Ejemplo n.º 18
0
def news_list(request):
    """
    获取新闻列表,
    并将新闻列表返回json格式
    :param request:
    :return:
    """
    #  news/list/?p=3
    # 这里的1 为默认参数
    page = int(request.GET.get('p', 1))
    category_id = int(request.GET.get('category_id', 0))
    start = settings.ONE_PAGE_NEWS_COUNT * (page - 1)
    end = start + settings.ONE_PAGE_NEWS_COUNT
    #  news: queryset -> [News():news()]
    # news_list = list(News.objects.all()[start:end].values())
    #      values 可以将queryset转换为一个字典
    #     print(category_id)
    if category_id == 0:
        # 如果category_id = 0 说明没有传category_id 过来
        newses = News.objects.all()[start:end]
    else:
        newses = News.objects.filter(category_id=category_id)[start:end]
    # 用序列化引转化成需要的json格式
    serizlizer = NewsSerializer(newses, many=True)
    return restful.result(data=serizlizer.data)
Ejemplo n.º 19
0
def login_view(request):
    #创建表单实例
    form = LoginForm(request.POST)
    #验证表单信息,并且获取表单内容
    if form.is_valid():
        telephone = form.cleaned_data.get('telephone')
        password = form.cleaned_data.get('password')
        remember = form.cleaned_data.get('remember')

        #使用django自带authenticate方法,验证登录,正确返回user对象,不正确返回None
        user = authenticate(request, username=telephone, password=password)

        #登录成功后继续执行
        if user:
            #判断是否进入黑名单
            if user.is_active:
                #使用login方法保持会话状态
                login(request, user)
                #如果用户选择记住密码,设置过期时间为默认的两周,否则浏览器关闭即过期
                if remember:
                    request.session.set_expiry(None)
                else:
                    request.session.set_expiry(0)
                #登录返回json数据,登录成功返回200,使用通用格式
                return restful.result()
            else:  #如果是黑名单,则返回405 表示没有权限,或者是其他错误
                return restful.unauth(message="没有权限")
        else:  #验证失败,登录信息错误
            return restful.params_error(message="手机号或者密码错误!")
    else:  #表单验证错误
        errors = form.get_errors()
        return restful.params_error(message=errors)
Ejemplo n.º 20
0
def thumbnail_process(request):
    access_key = 'L7Idi7_0oH-8LC1g2CjLb1h9Z6kN4-JLoqoOn21U'
    secret_key = 'IGhDFYcbCns_3RcEopOwmHLE8M7XctIe_bVwYfHr'
    bucket = 'establish'
    q = qiniuAuth(access_key, secret_key)
    token = q.upload_token(bucket)
    return restful.result(data={'token': token})
Ejemplo n.º 21
0
 def get(self, request):
     category_id = request.GET.get('pk')
     courses = Course.objects.select_related(
         'category', 'teacher').filter(category_id=category_id)
     serializers = CourseSerializers(courses, many=True)
     data = serializers.data
     return restful.result(data=data)
Ejemplo n.º 22
0
def delete_rank(request):
    pk = request.POST.get('pk')
    try:
        Rank.objects.filter(pk=pk).delete()
        return restful.result(message='删除成功')
    except:
        return restful.params_error(message='删除排行失败,排行不存在')
Ejemplo n.º 23
0
def order_key(request):
    """支付加密"""
    goodsname = request.POST.get('goodsname')
    istype = request.POST.get('istype')
    notify_url = request.POST.get('notify_url')
    orderid = request.POST.get('orderid')
    price = request.POST.get('price')
    return_url = request.POST.get('return_url')

    token = settings.PAY_TOKEN
    uid = settings.PAY_UID
    orderuid = str(request.user.pk)

    key = md5(
        (goodsname +
         istype +
         notify_url +
         orderid +
         orderuid +
         price +
         return_url +
         token +
         uid).encode("utf-8")).hexdigest()
    # key = md5 ("".join ([goodsname, istype, notify_url, orderuid, orderuid, price, return_url, token, uid])
    # .encode ("utf-8")).hexdigest ()
    return restful.result(data={'key': key})
Ejemplo n.º 24
0
def course_token(request):
    """ 百度点播的token """
    course_id = request.GET.get('course_id')
    course = Course.objects.get(id=course_id)
    order = CourseOrder.objects.filter(course=course, statuse=2).exists()
    if not order:
        return restful.params_error('购买了吗')
    video_url = request.GET.get('video_url')
    # 过期时间
    expiration_time = int(time.time()) + 2 * 60 * 60

    USER_ID = settings.BAIDU_CLOUD_USER_ID
    USER_KEY = settings.BAIDU_CLOUD_USER_KEY

    # file=http://hemvpc6ui1kef2g0dd2.exp.bcevod.com/mda-igjsr8g7z7zqwnav/mda-igjsr8g7z7zqwnav.m3u8
    extension = os.path.splitext(video_url)[1]  # .m3u8
    # 'mda-igjsr8g7z7zqwnav.m3u8'.replace('.m3u8', '') = 'mda-igjsr8g7z7zqwnav'
    media_id = video_url.split('/')[-1].replace(extension, '')

    # unicode->bytes=unicode.encode('utf-8')bytes
    key = USER_KEY.encode('utf-8')
    message = '/{0}/{1}'.format(media_id, expiration_time).encode('utf-8')
    signature = hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()
    token = '{0}_{1}_{2}'.format(signature, USER_ID, expiration_time)
    print('token:', token)
    # a5e28c640e8436d9d0b7800116d1d59fc358229e8e448c5bb43d88fcdb114f83_92166a15820c4d2eb7798a57ee8230d2_1533032256
    return restful.result(data={'token': token})
Ejemplo n.º 25
0
def course_token(request):
    # video:是视频文件的完整链接
    file = request.GET.get('video')
    # 判断用户是否已购买;
    course_id = request.GET.get('course_id')
    if not CourseOrder.objects.filter(
            course_id=course_id, buyer=request.user, status=2).exists():
        return restful.params_error(message="请先购买课程!")
    # 过期时间2小时;(当前时间戳+两个小时);
    expiration_time = int(time.time()) + 2 * 60 * 60
    USER_ID = settings.BAIDU_CLOUD_USER_ID
    USER_KEY = settings.BAIDU_CLOUD_USER_KEY

    # file=http://hemvpc6ui1kef2g0dd2.exp.bcevod.com/mda-igjsr8g7z7zqwnav/mda-igjsr8g7z7zqwnav.m3u8
    # 先获取扩展名;再通过‘/’分割取最后一个值,并将扩展名替换为空字符串;得到‘ID’;
    extension = os.path.splitext(file)[1]
    media_id = file.split('/')[-1].replace(extension, '')

    # 将‘USER_KEY’进行编码;后面的‘hmac.new()’只能接受bytes类型;
    # unicode->bytes=unicode.encode('utf-8')bytes
    key = USER_KEY.encode('utf-8')
    message = '/{0}/{1}'.format(media_id, expiration_time).encode('utf-8')

    # signature:生成签名;
    # disgestmod:指定加密方式;
    signature = hmac.new(key, message, digestmod=hashlib.sha256).hexdigest()

    # 利用下划线(_)连接signature,userId,expirationTime组合成token = String.format(“ % s_ % s_ % s”, signature, userId,expirationTime)
    token = '{0}_{1}_{2}'.format(signature, USER_ID, expiration_time)
    return restful.result(data={'token': token})