django 用户认证

来源:互联网 发布:银行核心业务系统数据 编辑:程序博客网 时间:2024/06/09 11:03

覆盖auth model

有时候django本身提供的auth表中的字段不能满足我们的需求,就需要对原有的auth model进行扩展.

在models.py中这样定义:

class UserProfile(AbstractUser):    nick_name = models.CharField('昵称', max_length=50, default='')

那么在settings.py就要这样配置:

AUTH_USER_MODEL = "authentication.UserProfile"

修改 authenticate方法

为了让用户登录的时候可以使用 用户名+密码 和 邮箱+密码 两种方式来登录系统.

在views.py 中这样定义

from django.contrib.auth.backends import ModelBackendfrom django.db.models import Qclass 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',)

Django Simple Captcha

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>
原创粉丝点击