Django专用URL

django-privateurl的Python项目详细描述


buildpypi

此应用程序可以帮助您轻松灵活地实现需要使用私有URL的不同特性。 对于注册确认、密码恢复、付费内容访问等用户。

低级API提供完全控制和允许:

  • 按时间和点击次数限制专用URL
  • 自动删除不使用的URL
  • 了解每个url的点击次数、第一次和最后一次点击的日期
  • 控制令牌生成器
  • 以json格式保存附加数据并在url点击时使用它
  • 使用django信号处理成功或失败的点击并控制服务器响应

安装

要求:

  • Django v1.8+

1。安装django-privateurl

  • 通过PIP:

    $ pip install django-privateurl
    
  • 通过设置工具:

    $ easy_install django-privateurl
    
For install development version use ^{tt2}$ instead ^{tt1}$.

2。在django项目中设置settings.py

INSTALLED_APPS = (
  ...,
  'privateurl',
)

3。在urls.py

中添加url模式
urlpatterns = [
    ...
    url(r'^private/', include('privateurl.urls', namespace='privateurl')),
]

^{str 1}4美元。运行迁移:

$ manage.py migrate

用法

首先,您需要使用createClass方法创建privateURL:

PrivateUrl.create(action, user=None, expire=None, data=None, hits_limit=1, auto_delete=False,
                  token_size=None, replace=False, dashed_piece_size=None)
  • action-是一个在url中使用的slug,允许区分一个url和另一个url
  • user–是可以在请求过程中获取的用户实例
  • expire–是私有url的过期日期。您可以设置datetimetimedelta
  • data–是将另存为json的数据。设置dict对象是个好主意
  • hits_limit–是请求的限制。设置0表示取消限制
  • auto_delete–如果要在私有url对象不可用时删除它,请设置True
  • token_size–设置令牌的长度。您可以用最小和最大大小设置大小或元组的数目。保留None用于使用settings.PRIVATEURL_DEFAULT_TOKEN_SIZE
  • 中的值 之前
  • dashed_piece_size–每隔n个符号使用破折号拆分标记。保留None用于使用settings.PRIVATEURL_DEFAULT_TOKEN_DASHED_PIECE_SIZE
  • 中的值

例如:

from privateurl.models import PrivateUrl

purl = PrivateUrl.create('registration-confirmation', user=user)
user.send_email(
    subject='Registration confirmation',
    body='Follow the link for confirm your registration: {url}'.format(
        url=purl.get_absolute_url(),
    ),
)

对于catch private url请求,您必须为privateurl_ok信号创建接收器:

from django.dispatch import receiver
from dju_privateurl.signals import privateurl_ok, privateurl_fail

@receiver(privateurl_ok)
def registration_confirm(request, obj, action, **kwargs):
    if action != 'registration-confirmation':
        return
    if obj.user:
        obj.user.registration_confirm(request=request)

如果要处理无效的私有url,可以为privateurl_fail信号创建接收器:

from django.dispatch import receiver
from dju_privateurl.signals import privateurl_fail

@receiver(privateurl_fail)
def registration_confirm_fail(request, obj, action, **kwargs):
    if action != 'registration-confirmation':
        return
    if obj:
        # private url is expired or has exceeded ``hits_limit``
        pass
    else:
        # private url doesn't exists or token in url is not correct
        pass

处理后privateurl_ok信号将重定向到根页/

处理后privateurl_fail信号将引发Http404异常。

如果要更改此逻辑,可以在接收器中使用键response返回dict

from django.shortcuts import redirect, render
from django.dispatch import receiver
from dju_privateurl.signals import privateurl_ok, privateurl_fail

@receiver(privateurl_ok)
def registration_confirm(request, obj, action, **kwargs):
    if action != 'registration-confirmation':
        return
    if obj.user:
        obj.user.registration_confirm(request=request)
        obj.user.login()
        return {'response': redirect('user_profile')}

@receiver(privateurl_fail)
def registration_confirm_fail(request, obj, action, **kwargs):
    if action != 'registration-confirmation':
        return
    return {'response': render(request, 'error_pages/registration_confirm_fail.html', status=404)}

要获得data,需要使用方法get_data()

@receiver(privateurl_ok)
def registration_confirm(request, obj, action, **kwargs):
    ...
    data = obj.get_data()
    ...

设置

PRIVATEURL_URL_NAMESPACE–在urls.py中设置的命名空间。默认情况下是privateurl

PRIVATEURL_DEFAULT_TOKEN_SIZE–将使用creategenerate_token方法生成的令牌的默认大小。默认情况下是(8, 64)

PRIVATEURL_DEFAULT_TOKEN_DASHED_PIECE_SIZE–在creategenerate_token方法中使用破折号连接的块的默认大小。默认情况下是12

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:不解析XML的简单XML。例外   KIE Workbench的java自定义UI   java将元素从bucket移动到LinkedList,但有一个元素被完全删除   如何将java stream collect转换为scala   java运行AsynkTask多次不工作   java组织。xml。萨克斯。SAXParseException:cvccomplextype。2.4.c:匹配的通配符是严格的   java是一种计算排序算法所需时间的合适方法   java在O(logn)时间内对排序整数数组中具有相同数字的数字进行计数   xpages从当前数据库javaAgent调用另一个数据库的javaAgent   java如何在instagram中上传特定位置的所有照片   JavaApachePOI可以有效地删除多个列   java创建的对象数   java我可以在关闭连接时关闭Oracle JDBC自动提交吗?