基于 django 的 auth 写一个登录和注册模块 点击注册后将信息写入数据库并提示注册成功 登录时提示登录成功或失败
时间: 2024-01-10 11:02:11 浏览: 34
好的,下面是一个基于 Django 的 auth 的登录和注册模块的示例代码:
### urls.py
```python
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('login/', views.user_login, name='login'),
path('logout/', views.user_logout, name='logout'),
path('register/', views.user_register, name='register'),
]
```
### views.py
```python
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from .forms import UserLoginForm, UserRegistrationForm
def user_login(request):
if request.method == 'POST':
form = UserLoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(request, username=cd['username'], password=cd['password'])
if user is not None:
if user.is_active:
login(request, user)
messages.success(request, '登录成功!')
return redirect('blog:post_list')
else:
messages.error(request, '账户被禁用!')
return redirect('accounts:login')
else:
messages.error(request, '无效的用户名或密码!')
return redirect('accounts:login')
else:
form = UserLoginForm()
return render(request, 'accounts/login.html', {'form': form})
def user_logout(request):
logout(request)
messages.success(request, '注销成功!')
return redirect('blog:post_list')
def user_register(request):
if request.method == 'POST':
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(user_form.cleaned_data['password'])
new_user.save()
messages.success(request, '注册成功!请登录。')
return redirect('accounts:login')
else:
user_form = UserRegistrationForm()
return render(request, 'accounts/register.html', {'user_form': user_form})
```
### forms.py
```python
from django import forms
from django.contrib.auth.models import User
class UserLoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(label='密码', widget=forms.PasswordInput)
password2 = forms.CharField(label='重复密码', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email')
def clean_password2(self):
cd = self.cleaned_data
if cd['password'] != cd['password2']:
raise forms.ValidationError('两次输入的密码不匹配!')
return cd['password2']
```
以上是一个基于 Django 的 auth 的登录和注册模块的示例代码,你可以根据自己的需求进行修改和扩展。在注册和登录成功或失败的情况下,我们使用了 Django 内置的 messages 库,可以在模板中以 Bootstrap 的样式显示提示信息。