python - 如何优雅地实现django的登录/注册?
迷茫
迷茫 2017-04-18 09:45:54
0
2
666

我是看的Django Book的教程,然后用最原始的方式实现的。请问关于登录和注册,Django有没有封装像ListView, DetailView, FormView这样的class来直接实现呢?


这是login代码的实现

def user_login(request):
    if request.POST:
        username = password = ''
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user is not None and user.is_active:
            login(request, user)
            return redirect('/')
    else:
        context = {}
        return render(request, 'account/login.html', context)

这是register代码的实现 

def user_register(request):
    if request.method == "POST":
        register_form = UserForm(request.POST)
        if register_form.is_valid():
            username = register_form.cleaned_data['username']
            password = register_form.cleaned_data['password']
            email = register_form.cleaned_data['email']

            user = User.objects.create_user(username, email, password)
            user.save()

            login(request, authenticate(username=username, password=password))
            return redirect('/')
    else:
        register_form = UserForm()
        context = {'register_form': register_form}
        return render(request, 'account/register.html', context)

这是logout代码的实现

def user_logout(request):
    logout(request)
    return redirect('/')

一般在实际开发过程中会采用什么方法实现登录/注册/登出呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(2)
黄舟

Tout d'abord, lors de la connexion, vous devez calculer une session ou des cookies pour le front-end. Après vous être connecté, le front-end viendra vers vous avec la session ou les cookies calculés et vous dira que je me suis connecté. mes informations de connexion, puis une fois que le serveur les a obtenues, il calcule si c'est la même chose que ce que j'ai calculé. Si c'est le cas, cela signifie qu'il est connecté normalement. Au lieu de simplement accéder à une page, aucune information n'est renvoyée.

Il va sans dire que vous devez vous inscrire. . Écrivez simplement le mot de passe du compte dans la base de données, puis réutilisez-le lors de la connexion et comparez-le. S'il est correct, passez à la connexion.

La déconnexion signifie effacer les informations de connexion de l'utilisateur, telles que les cookies, l'actualisation de la session, etc. Si elles ne sont pas détectées, vous ne pourrez pas accéder à la page de connexion, vous pouvez donc simplement accéder et rediriger vers la page de connexion.

巴扎黑

Devrions-nous vérifier le nom d'utilisateur et le mot de passe transmis depuis le front-end ?

class LoginForm(forms.Form):

    email = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)
    
    def __init__(self, *args, **kwargs):
        self.user_cache = None
        super(LoginForm, self).__init__(*args, **kwargs)

    def clean(self):
        email = self.cleaned_data.get('email')
        password = self.cleaned_data.get('password')

        if email and password:
            if not AtUser.objects.filter(email=email).exists():
                raise forms.ValidationError(u'该账号不存在')

            self.user_cache = authenticate(email=email, password=password)
            if self.user_cache is None:
                raise forms.ValidationError(u'邮箱或密码错误!')

            elif not self.user_cache.is_active:
                raise forms.ValidationError(u'该帐号已被禁用!')

        return self.cleaned_data

    def get_user_id(self):
        """获取用户id"""
        if self.user_cache:
            return self.user_cache.id
        return None

    def get_user(self):
        """获取用户实例"""
        return self.user_cache

Identique à l'inscription

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal