django 用户认证

覆盖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 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',
)

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值