Beispiel #1
0
    def post(self, request):
        # post --- 注册处理

        # 1, 接收用户数据
        username = request.POST.get('user_name')
        password = request.POST.get('pwd')
        cpwd = request.POST.get('cpwd')
        email = request.POST.get('email')
        allow = request.POST.get("allow")

        # 2, 检验数据真实性
        if not all([username, password, email]):
            return render(request, 'register.html', {'errmsg': "数据不完整...."})

        # 检验两侧密码是否一致
        if password != cpwd:
            return render(request, 'register.html', {'errmsg': "两次密码不一致....."})

        # 校验邮箱合法性
        if not re.findall(r'^[a-zA-Z0-9][a-zA-Z0-9_]+@[A-Za-z0-9]+\.com$',
                          email):
            return render(request, 'register.html', {'errmsg': '邮箱格式不正确....'})

        # 校验是否同意了协议
        if allow != 'on':
            return render(request, 'register.html',
                          {'errmsg': '使用本网站,需要同意网站协议!'})

        # 校验用户是否存在
        try:
            user = User.objects.get(username=username)  # get查找不到会报错
        except User.DoesNotExist:
            user = None  # 报错表示用户名不存在

        if user:
            # 表示用户已存在
            return render(request, 'register.html', {'errmsg': '用户名已存在'})

        # 3, 进行业务处理: 注册
        # 利用create_users函数创建新的用户
        user = User.objects.create_user(username, email, password)
        # 激活标志
        user.is_active = 0
        # 提交数据库
        user.save()

        # 发送邮件进行用户激活: http:127.0.0.1:8000/user/activate/user_id
        # 加密用户的身份信息
        secret_key = settings.SECRET_KEY
        serial = Serial(secret_key, 3600)
        info = {"confirm": user.id}
        token = serial.dumps(
            info)  # bytes 类型 需要解码成str,不然运行会报错:bytes no Json serizable.....
        token = token.decode()

        send_activating_mail.delay(email, username, token)  # celery 异步处理发送激活邮件

        # 最终返回到首页
        return redirect(reverse('goods:index'))
Beispiel #2
0
 def correct_token(token):
     s = Serial("secret_key")
     #Since loads breaks if the token is expired we throw this in a try block
     try:
         user_id = s.loads(token)['user_id']
     except:
         return None
     #if we get here the token was valid and we can return the user associated with said token
     return User.query.get(user_id)
Beispiel #3
0
 def get(self, request, token):
     serial = Serial(settings.SECRET_KEY, 3600)
     try:
         info = serial.loads(token)
         uid = info.get('confirm')
         user = User.objects.get(id=uid)
         user.is_active = 1
         user.save()
         return redirect(reverse('user:login'))
     except SignatureExpired:
         return HttpResponse("链接已过期....")
Beispiel #4
0
def verify_auth_token(token):
    s = Serial(current_app.config['SECRET_KEY'])
    try:
        data = s.loads(token)
    except BadSignature:
        raise AuthFailed(msg='非法身份,请重新登录', error_code=1002)
    except SignatureExpired:
        raise AuthFailed(msg='身份过期,请重新登录', error_code=1003)

    uid = data['uid']
    ac_type = data['type']
    auth = data['auth']
    return User(uid, ac_type, auth, '')
Beispiel #5
0
def processing_single(url, expire=10000):
    """    :param expire: default value
          :param url
    """
    s = Serial(os.environ.get('SECRET_KEY'), expire)
    try:
        res = pytube.YouTube(url)
        videos = res.streams.filter(
            file_extension="mp4",
            progressive=True).order_by('resolution').asc().all()
        meta = []

        for v in videos:
            mb1 = math.pow(10, 6)
            mb_size = math.ceil(v.filesize / mb1)
            mime_type = v.mime_type

            encrypt_url = s.dumps({
                'url': v.url,
                'mime_type': mime_type,
                'title': res.title
            }).decode('utf-8')
            _ = {
                'url': encrypt_url,
                'resolution': v.resolution,
                'size': mb_size
            }
            meta.append(_)

        return jsonify(
            meta=meta,
            title=res.title,
            thumbnail_url=res.thumbnail_url,
            length=math.ceil(int(res.length) / 60),
            descp=res.description,
            views=res.views,
            rating=res.rating,
            restricted=res.age_restricted,
        )
    except Exception as e:
        if "regex" in e.__str__():
            return jsonify(
                error="Youtube Url doesnt not match any known format")
        elif "unavailable" in e.__str__():
            return jsonify(error="No Youtube video found. Please check URL")
        else:
            return jsonify(error=e.__str__())
Beispiel #6
0
def processing_playlist(url, expires=1000000):
    """    :param expires: default value
              :param url
        """

    s = Serial(os.environ.get('SECRET_KEY'), expires)
    try:
        res = pytube.Playlist(url)
        res.populate_video_urls()
        meta = []
        for video_url in res.video_urls:
            res = pytube.YouTube(video_url)
            videos = res.streams.filter(
                file_extension="mp4", progressive=True,
                res="720p").order_by('resolution').asc().all()

            for v in videos:
                mb1 = math.pow(10, 6)
                mb_size = math.ceil(v.filesize / mb1)
                mime_type = v.mime_type

                encrypt_url = s.dumps({
                    'url': v.url,
                    'mime_type': mime_type,
                    'title': res.title
                }).decode('utf-8')
                _ = {
                    'url': encrypt_url,
                    'url_un': v.url,
                    'resolution': v.resolution,
                    'size': mb_size,
                    'title': res.title,
                    'thumbnail_url': res.thumbnail_url,
                    'length': math.ceil(int(res.length) / 60),
                    'descp': res.description,
                    'views': res.views,
                    'rating': res.rating,
                    'restricted': res.age_restricted,
                }
                meta.append(_)
        return jsonify(meta=meta)

    except Exception as e:
        return jsonify(error=e.__str__())
Beispiel #7
0
    def process_request(self, request):
        # 获取url后缀
        url_path = request.path_info

        # 是否登录
        if url_path == '/api/private/v1/login' or url_path == '/api/private/v1/register' or '/admin':
            return None
        try:
            token = request.META.get('HTTP_AUTHORIZATION', '')
            if not token:
                raise Exception('没有token')
            serial = Serial(secret_key=settings.SECRET_KEY)
            userinfo = serial.loads(token)

            user = Manager.objects.filter(username=userinfo['username'],
                                          id=userinfo['id'])
            if not user:
                raise Exception('token错误')
            request.user = userinfo
        except:
            return JsonResponse({'meta': {'msg': '认证失败', 'status': 401}})
        return None
Beispiel #8
0
 def create_token(self, seconds=600):
     s = Serial("secret_key", seconds)
     return s.dumps({'user_id': self.id}).decode('utf-8')
Beispiel #9
0
def generate_auth_token(uid, auth, ac_type, scope=None, expiration=7200):
    s = Serial(current_app.config['SECRET_KEY'], expires_in=expiration)
    return s.dumps({'uid': uid, 'auth': auth, 'type': ac_type.value})