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中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy