Django Tastypie 验证码
Django Tastypie Captcha
在 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 )
我想为此 Tasypie Api.
设置 Captcha
我看到了 django-simple-captcha,但我发现这个模块用于 Django Forms 和 Api。
在 Tastypie 中使用 Captcha Api 有什么解决方案吗?!!
提示:我在客户端使用了Angular.js。
找了很多,发现用Tastypie没关系。对于验证码,您可以使用 django-simple-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()})
最后在登录方法中检查验证码:
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
})
注意: 重要的是 Angular 配置在我的例子中,我添加这个代码来保护 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'; })
完成!
在 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 )
我想为此 Tasypie Api.
设置 Captcha我看到了 django-simple-captcha,但我发现这个模块用于 Django Forms 和 Api。
在 Tastypie 中使用 Captcha Api 有什么解决方案吗?!!
提示:我在客户端使用了Angular.js。
找了很多,发现用Tastypie没关系。对于验证码,您可以使用 django-simple-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()})
最后在登录方法中检查验证码:
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
})
注意: 重要的是 Angular 配置在我的例子中,我添加这个代码来保护 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'; })
完成!