当前位置:   article > 正文

django 用户认证_django 认证

django 认证

覆盖auth model

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

在models.py中这样定义:

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

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

AUTH_USER_MODEL = "authentication.UserProfile"
  • 1

修改 authenticate方法

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

在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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在settings.py 中就要这样配置:

AUTHENTICATION_BACKENDS = (
    'authentication.views.CustomBackend',
)
  • 1
  • 2
  • 3

Django Simple Captcha

1 . 安装插件

apt-get -y install libz-dev libjpeg-dev libfreetype6-dev python-dev
  • 1

2 . 在settings 中添加captcha 这个app

EXTRA_APPS 是我设置用来存放第三方app的列表,
也可以直接在INSTALLED_APPS中添加.

EXTRA_APPS = [
    'captcha',
]
  • 1
  • 2
  • 3

3 . 在urls.py添加captcha的url

url(r'^captcha/', include('captcha.urls')),
  • 1

4 . 新建form

下面是一个注册的验证表单

class RegisterForm(forms.Form):
    email = forms.EmailField(required=True)
    password = forms.CharField(required=True, min_length=5)
    captcha = CaptchaField(error_messages={"invalid": "验证码出错了"})
  • 1
  • 2
  • 3
  • 4

5 . 使用

在views中这样使用

class RegisterView(View):
    @staticmethod
    def get(request):
        register_form = RegisterForm()
        return render(request, 'authentication/register.html', {'register_form': register_form})
  • 1
  • 2
  • 3
  • 4
  • 5

在template中这样使用:

<form id="register_form" method="post" action="{% url 'test' %}" autocomplete="off">
    {% csrf_token %}
    {{ register_form.captcha }}
    <input type="submit" value="提交">
</form>
  • 1
  • 2
  • 3
  • 4
  • 5

生成的前端代码如下:

<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

添加如下的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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/71650
推荐阅读
相关标签
  

闽ICP备14008679号