在Django tastypie中,我编写了一个登录名Api如下:
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return self.create_response(request, {
'success': True
})
else:
return self.create_response(request, {
'success': False,
}, HttpForbidden )
else:
return self.create_response(request, {
'success': False,
}, HttpUnauthorized )我想将Captcha设置为Tasypie Api。
我看到了django-简单-captcha,但我发现这个模块用于Django窗体和Api.。
有任何解决方案使用Captcha与Tastypie Api?!
提示:我在ClientSide中使用了Angular.js。
发布于 2015-05-09 17:41:25
在搜索了很多之后,我发现你使用Tastypie并不重要。对于Captcha,您可以使用django-简单-captcha。
首先,您只需要创建这样一个表单:
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
captcha_login = CaptchaField()然后,按照以下方式使用该对象呈现模板:
def index(request):
return render(request,
'shared/layout.html',
{'form': LoginForm()})最后,在登录方法中检查captcha:
def login(self, request, **kwargs):
self.method_check(request, allowed=['post'])
# Validate Captcha on LoginForm.
form = LoginForm(request.POST)
if form.is_valid() == False:
return self.create_response(request, {
'success': False,
'error': form.errors,
'new_captcha_key': CaptchaStore.generate_key(),
'new_captcha_image': captcha_image_url(CaptchaStore.generate_key()),
}, HttpBadRequest)
else:
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return self.create_response(request, {
'success': True
})注意:在我的例子中,重要的是角配置,我添加了用于CSRF保护的代码:)
angular.module('myApp').config(function ($interpolateProvider , $routeProvider, $locationProvider, $httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; })完成了!
https://stackoverflow.com/questions/29743830
复制相似问题