使用Django登录/注销用户

问题描述 投票:2回答:1

我目前正在与Django合作开展一个项目。我正在尝试使用python脚本实现登录和注销用户的能力,以便从客户端向服务器发送post请求。我试图从我的应用程序注销用户,但它似乎不起作用。在我的登录功能中,这是用于登录用户的方法:

    # Function for user's login
    @csrf_exempt
    def loginUser(request):
        login_user = authenticate(username=user.customer_username, password=user.customer_password)
        if login_user is not None:
            if login_user.is_active:
                request.session.set_expiry(86400)
                login(request, login_user)
                print(request.user.is_active)
    http_response = HttpResponse()
    return http_response

打印结果在这里是True,这意味着如果我没有错,登录方法是正确的。当我尝试注销用户时,使用此方法:

    # Function for user's logout
    @csrf_exempt
    def logoutUser(request):
        # Loging out the user
        print(request.user.is_active)
        logout(request)
    http_response = HttpResponse()
    return http_response

它不会注销用户,并且打印结果在这里为False,这意味着用户没有登录。如果有人有任何想法,如何解决这个问题,那将非常有帮助。谢谢。

python django
1个回答
0
投票

我设法找到了这个问题的答案。因为我使用python脚本在服务器和客户端之间发送和接收发布请求,所以登录的当前用户由于客户端请求客户端和服务器之间的连接停止后未保存。因此,通过初始化全局Session对象并稍后使用该对象发出请求,它允许我在请求中保留某些参数。这是我在客户端使用的代码,用于发出请求:

import requests
from requests import Session
# Create the Json object for the login
data = {'username': username,
        'password': password}
r = requests.Session()
login_response = r.post("http://127.0.0.1:8000/api/login", data=data)
logout_response = r.post("http://127.0.0.1:8000/api/logout")

这是我在服务器端使用的代码:

# Function for user's login
@csrf_exempt
def loginUser(request):
    # Get the username and password from the post request
    username = request.POST['username']
    password = request.POST['password']
    login_user = authenticate(username=username, 
                                 password=password)
    if login_user is not None:
        if login_user.is_active:
            login(request, login_user)
            http_response = HttpResponse()
    return http_response


# Function for user's logout
@csrf_exempt
def logoutUser(request):
    # Loging out the user
    logout(request)
    http_response = HttpResponse()
    return http_response

谢谢您的帮助!!

© www.soinside.com 2019 - 2024. All rights reserved.