赞
踩
有时候django本身提供的auth表中的字段不能满足我们的需求,就需要对原有的auth model进行扩展.
在models.py中这样定义:
class UserProfile(AbstractUser):
nick_name = models.CharField('昵称', max_length=50, default='')
那么在settings.py就要这样配置:
AUTH_USER_MODEL = "authentication.UserProfile"
为了让用户登录的时候可以使用 用户名+密码 和 邮箱+密码 两种方式来登录系统.
在views.py 中这样定义
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
class CustomBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username=username) | Q(email=username))
if user.check_password(password):
return user
except:
return None
在settings.py 中就要这样配置:
AUTHENTICATION_BACKENDS = (
'authentication.views.CustomBackend',
)
1 . 安装插件
apt-get -y install libz-dev libjpeg-dev libfreetype6-dev python-dev
2 . 在settings 中添加captcha 这个app
EXTRA_APPS 是我设置用来存放第三方app的列表,
也可以直接在INSTALLED_APPS中添加.
EXTRA_APPS = [
'captcha',
]
3 . 在urls.py添加captcha的url
url(r'^captcha/', include('captcha.urls')),
4 . 新建form
下面是一个注册的验证表单
class RegisterForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(required=True, min_length=5)
captcha = CaptchaField(error_messages={"invalid": "验证码出错了"})
5 . 使用
在views中这样使用
class RegisterView(View):
@staticmethod
def get(request):
register_form = RegisterForm()
return render(request, 'authentication/register.html', {'register_form': register_form})
在template中这样使用:
<form id="register_form" method="post" action="{% url 'test' %}" autocomplete="off">
{% csrf_token %}
{{ register_form.captcha }}
<input type="submit" value="提交">
</form>
生成的前端代码如下:
<form id="register_form" method="post" action="/user/test" autocomplete="off">
<input name="csrfmiddlewaretoken" value="ws6dQwx3zh8632bNycWstdm3ZEDdHeR0NLWZbq06JpAqHrikSrRqx7HLjmeffsqL"
type="hidden">
<img src="/captcha/image/f3cb5a208550bf6ae7daaaf0f0191677842c4a68/" alt="captcha" class="captcha"><input
id="id_captcha_0" name="captcha_0" value="f3cb5a208550bf6ae7daaaf0f0191677842c4a68" type="hidden">
<input autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="id_captcha_1"
name="captcha_1" type="text">
<input value="提交" type="submit">
</form>
添加如下的javascript代码,可以实现点击验证码更换:
要先添加jquery的引用
<script>
//刷新验证码
function refresh_captcha(event) {
$.get("/captcha/refresh/?" + Math.random(), function (result) {
$('#' + event.data.form_id + ' .captcha').attr("src", result.image_url);
$('#id_captcha_0').attr("value", result.key);
});
return false;
}
//注册刷新验证码点击事件
$('#register_form .captcha').click({'form_id': 'register_form'}, refresh_captcha);
</script>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。