我正在迁移一个现有的Django项目,以使用wagtail CMS。
我不清楚如何使用wagtail来限制费率,我在文档中没有看到任何关于它的内容。
举个例子:
在集成wagtail之前,我有一个返回隐私策略html页面的视图。
@ratelimit(
key='ip',
rate='15/m',
block=True
)
def show_privacy_policy(request):
context = base_context(request)
return render(
request,
'pages/privacy_policy.html',
context
)
字符串
现在这个被删除了,我有一个更通用的wagtail Page,用于渲染条款和条件或隐私政策等页面,我称之为InfoPage
。我唯一定义的是我的InfoPage模型,它有一个模板路径附加wagtail/info_page.html
。
class InfoPage(Page):
template = "wagtail/info_page.html"
last_modified_date = models.DateField("Last modified date")
body = RichTextField(features=['bold', 'italic', 'link', 'ul', 'h3'])
content_panels = Page.content_panels + [
FieldPanel('last_modified_date'),
FieldPanel('body')
]
parent_page_types = ['news.Index']
subpage_types = []
型
这只是工作,我所有的信息页都正确呈现。但是,我没有看到任何方法来限制对这些页面的访问。如果没有方法来限制访问,我很容易受到DDOS攻击等。我在这里错过了什么?是否有一种方法来限制访问,或者我需要采取不同的方法?
2条答案
按热度按时间shyt4zoc1#
所有的Wagtail页面对象都实现了一个
serve
方法,这个方法的行为和Django视图一样,接受一个请求对象并返回一个响应。@ratelimit
装饰器很可能在这里被应用。但是,这可能不是很有效,因为Wagtail必须执行大量的数据库查询才能找出哪个页面对应于给定的URL -当您到达页面对象时,该请求已经消耗了大量的服务器资源。我建议在Web服务器层应用速率限制--例如,参见the Nginx documentation on rate limiting--或者像@cnk建议的那样,在外部使用Cloudflare这样的服务。这些选项几乎肯定会比在Django / Python应用层所做的任何事情更加安全,性能也更好。
rkue9o1l2#
而不是速率限制,我建议使用前端缓存,所以它是廉价的渲染页面。我使用Cloudflare与内置的enter link description here在缓存无效。有一些缓存无效包括股票Wagtail发行版或您可以使用CodeRed的wagtail-cache。