Django 注册后如何创建登录视图?

Django 注册后如何创建登录视图?,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

我为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 = 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')我需要一个视图变量来在浏览器中显示登录表单…在该视图中不是这样的您的意思是您需要一个模板?我在这一点上得到了错误用户登录(请求,用户)