Django专用URL
django-privateurl的Python项目详细描述
此应用程序可以帮助您轻松灵活地实现需要使用私有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的过期日期。您可以设置datetime或timedelta
- 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–将使用create或generate_token方法生成的令牌的默认大小。默认情况下是(8, 64)。
PRIVATEURL_DEFAULT_TOKEN_DASHED_PIECE_SIZE–在create或generate_token方法中使用破折号连接的块的默认大小。默认情况下是12。