Django RSS订阅源身份验证
我想在我的一个Django应用中添加RSS订阅源,并希望能够进行身份验证。
我想使用Django 1.2中的新订阅框架。我已经看过相关文档,基本的订阅源设置也完成了。
不过,我对如何进行订阅源的身份验证还不太了解,所以不太确定该采取什么最佳方法,或者我有哪些选择。
每个用户都有一个独特的子域名,我希望URL的结构能像这样:http://mysubdomain.mysite.com/myapp/rss/
,如果可能的话。
我不想让这些订阅源公开可用,是否可以使用用户的用户名和密码进行身份验证?你发现大多数订阅阅读器都支持这样做吗?如果无法为每个用户进行身份验证,我是否应该尝试使用uuid来给他们一个独特的URL,还是这样不够安全?
如你所见,我对该如何进行还不太确定,所以任何关于最佳做法的建议都将非常感谢。
谢谢
2 个回答
3
这是一个老帖子,不过我最近也遇到了同样的问题。我通过重载(也就是重新定义)Feed对象的__call__
方法来解决这个问题:
from django.http import HttpResponse
class ArticleFeed(Feed):
"snip [standard definitions of title, link, methods...]"
def __call__(self,request,*args,**kwargs):
if not request.user.is_authenticated():
return HttpResponse(status=401)
else:
return super().__call__(request,*args,**kwargs)
2
你有没有试过把这个叫做 django.contrib.syndication.views.feed
的功能放到一个需要登录的视图里?通常情况下,RSS订阅源是通过HTTP来获取的,所以这样做应该是可以的!
# Import Django's standard feed view.
from django.contrib.auth.decorators import login_required
from django.django.contrib.syndication.views import feed
# Wrap it in a new feed view that requires authentication!
private_feed = login_required(feed)
注意:我自己从来没有试过这个!
补充说明!
为了确保那些不支持重定向的RSS阅读器能够正常工作,返回一个HTTP 401状态码,代码如下:
authentication_url = '/accounts/login'
def feed_safe_login_required ( view ):
def _ ( request, *args, **kwargs ):
if not request.user.is_authenticated:
return HttpResponseNotAuthorized, authentication_url
return _
feed = feed_safe_login_required(django.contrib.syndication.views.feed)
这里的 HttpResponseNotAuthorized
是在这个 django代码片段 中定义的。