django 个人博客系统开发 - 注册 登录 注销

1 django.contrib.auth

   (login logout authenticate)

2 django.contrib.auth.hashers

 (make_password) django的加密方式

3 使用redirect进行跳转

4 模板中如何判断用户是否已经登录


例子

表单模型

class LoginForm(forms.Form):
    username = forms.CharField(
        widget=forms.TextInput(
            attrs={'id':"username",
                   'class': "txt_input txt_input2",
                   'required': 'required',}),
        max_length=50,
        error_messages={'required':'username不能为空'})
    password = forms.CharField(
        widget=forms.PasswordInput(
            attrs={'class':'txt_input',
                   'required':'required'}),
        max_length=20,
        error_messages={'required':'password不能为空'})


class RegForm(forms.Form):
    username = forms.CharField(
        widget=forms.TextInput(
            attrs={'id':"username",
                   'class': "txt_input txt_input2",
                   'required': 'required',}),
        max_length=50,
        error_messages={'required':'username不能为空'})
    password = forms.CharField(
        widget=forms.PasswordInput(
            attrs={'class':'txt_input',
                   'required':'required'}),
        max_length=20,
        error_messages={'required':'password不能为空'})
    email = forms.EmailField(
        widget=forms.EmailInput(
            attrs={'required':'required',
                    'class':'txt_input'}),
        max_length=50,
        error_messages={'required': 'email不能为空'})
    url = forms.URLField(
        widget=forms.URLInput(
            attrs={'class': 'txt_input'}),
        max_length=100,
        required=False)

视图函数

需要导入标准库的登陆 注销 认证模块

from django.contrib.auth.hashers import make_password
from django.contrib.auth import login, logout, authenticate

def do_login(request):
    try:
        if request.method == 'POST':
            login_form = LoginForm(request.POST)
            if login_form.is_valid():
                # 登录
                username = login_form.cleaned_data['username']
                password = login_form.cleaned_data['password']
                user = authenticate(username=username, password=password)
                if user is not None:
                    user.backend = 'django.contrib.auth.backends.ModelBackend'
                    login(request, user)
                else:
                    return render(request, 'failure.html', {'msg': '登陆失败'})

                return redirect(request.POST.get('source_url'))
            else:
                return render(request, 'failure.html', {'msg': login_form.errors})
        else:
            login_form = LoginForm()
    else Exception as e:
        print('login in err')
        print(e)

    return render(request, 'login.html', locals())


def do_logout(request):
    try:
        logout(request)
    except Exception as e:
        print(e)
    return redirect(request.META['HTTP_REFERER'])


def register(request):
    try:
        if request.method == 'POST':
            reg_form = RegForm(request.POST)
            if reg_form.is_valid():
                # 注册
                user = User.objects.create(
                    username = reg_form.cleaned_data['username'],
                    email = reg_form.cleaned_data['username'],
                    url=reg_form.cleaned_data['url'],
                    password= make_password(reg_form.cleaned_data['password']))
                user.save()

                # 登录
                # 指定默认的登录验证方式
                user.backend = 'django.contrib.auth.backends.ModelBackend'
                login(request, user)
                return redirect(request.POST.get('source_url'))
            else:
                return render(request, 'failure.html', {'msg':reg_form.errors})
        else:
            reg_form = RegForm()
    except Exception as e:
        print(e)

    return render(request, 'register.html', locals())

url

    url(r'^login/$', do_login, name='login'),
    url(r'^register/$', register, name='register'),
    url(r'^logout/$', do_logout, name='logout'),

模板表单中要加上

<input type="hidden" name="source_url" value="{{ request.META.HTTP_REFERER }}">


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值