Django 注册后如何创建登录视图?
我为registrarion创建模型、表单和视图,我想创建一个登录视图,以便在注册后用户可以登录 models.pyDjango 注册后如何创建登录视图?,django,django-views,Django,Django Views,我为registrarion创建模型、表单和视图,我想创建一个登录视图,以便在注册后用户可以登录 models.py from django.contrib.auth.models import AbstractUser from django_countries.fields import CountryField g_CHOICES = (('male','male'),('female','female')) class User(AbstractUser): gender
from django.contrib.auth.models import AbstractUser
from django_countries.fields import CountryField
g_CHOICES = (('male','male'),('female','female'))
class User(AbstractUser):
gender = models.CharField(max_length=100,choices=g_CHOICES,default="male")
country = CountryField()
location = models.CharField(max_length=30, blank=True)
forms.py
g_CHOICES = (('male','male'),('female','female'))
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
gender = forms.ChoiceField(choices=g_CHOICES)
country = CountryField().formfield()
location = forms.CharField(max_length=30,)
class Meta:
model = User
fields = ['first_name','last_name','username','email',
'password1','password2','gender',
'country','location']
views.py
def register(request):
if request.method == 'POST':
rform = UserRegisterForm(request.POST)
if rform.is_valid():
rform.save()
username = rform.cleaned_data.get('username')
messages.success(request,('Account created for '+str(username)))
return redirect('/')
else:
rform = UserRegisterForm()
return render(request,'reg.html',{'rform':rform})
现在我想创建一个登录视图,请有人帮助您可以使用以下类似的视图:
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
messages.success(request, 'You are now logged in')
return redirect('dashboard')
else:
messages.error(request, 'Invalid credentials')
return redirect('login')
else:
return render(request, 'accounts/login.html')
或者,如果您使用的是django表单,您也可以这样做,这是更可取的方式:
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(request,
username=cd['username'],
password=cd['password'])
if user is not None:
login(request, user)
return HttpResponse('Authenticated '\
'successfully')
else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request, 'account/login.html', {'form': form})
您可以使用以下类似的方法:
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
messages.success(request, 'You are now logged in')
return redirect('dashboard')
else:
messages.error(request, 'Invalid credentials')
return redirect('login')
else:
return render(request, 'accounts/login.html')
或者,如果您使用的是django表单,您也可以这样做,这是更可取的方式:
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(request,
username=cd['username'],
password=cd['password'])
if user is not None:
login(request, user)
return HttpResponse('Authenticated '\
'successfully')
else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request, 'account/login.html', {'form': form})
您需要一个从POST请求中获取用户用户名和密码的视图,然后使用django.contrib.auth包中的“authenticate”和“login”对其进行身份验证和登录
from django.contrib.auth import login, authenticate
from django.views import View
class HandleLogin(View):
def get(self, request):
return render(request, "login.html", {})
def post(self, request):
username= request.POST.get("username")
password = request.POST.get("password")
user = authenticate(username, password)
if user is not None:
if user.is_active:
login(request, user)
# Do something for succesfull logged in
else:
# Do something else because user is not active
else:
# Do something about user not existing
有关详细信息:您需要一个视图,该视图从POST请求中获取用户的用户名和密码,然后对其进行身份验证,并使用django.contrib.auth包中的“authenticate”和“login”将其登录
from django.contrib.auth import login, authenticate
from django.views import View
class HandleLogin(View):
def get(self, request):
return render(request, "login.html", {})
def post(self, request):
username= request.POST.get("username")
password = request.POST.get("password")
user = authenticate(username, password)
if user is not None:
if user.is_active:
login(request, user)
# Do something for succesfull logged in
else:
# Do something else because user is not active
else:
# Do something about user not existing
有关更多信息:在login.html中,我必须给出重定向我的视图重定向的可选方法,如果您没有仪表板,您可以重定向到主页重定向(“/”),就像这样,或者您可以给出这样的响应。HttpResponse('Authenticated'successfully')我需要一个视图变量来在浏览器中显示登录表单…在该视图中不是这样的,你的意思是你需要一个模板?我在login.html中的用户登录(请求,用户)出现错误,我必须给出重定向我的视图重定向是一种可选方式,如果您没有仪表板,您可以重定向到主页重定向(“/”),就像这样,或者您可以给出这样的响应。HttpResponse('Authenticated'successfully')我需要一个视图变量来在浏览器中显示登录表单…在该视图中不是这样的您的意思是您需要一个模板?我在这一点上得到了错误用户登录(请求,用户)