Python 如何将主键保存为引用

Python 如何将主键保存为引用,python,django,Python,Django,我正在创建一个Django应用程序。我希望登录用户的pk保存在变量userpk中。即使我登录了一个用户,userpk的值仍然是“无”。我做错了什么 视图.py from django.shortcuts import render, redirect, get_object_or_404 from .models import * userpk = None def login(request): if request.method == 'POST': userna

我正在创建一个Django应用程序。我希望登录用户的pk保存在变量userpk中。即使我登录了一个用户,userpk的值仍然是“无”。我做错了什么

视图.py

from django.shortcuts import render, redirect, get_object_or_404
from .models import *

userpk = None

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        try:
            account = Account.objects.get(username=username)
        except:
            return render(request, 'MyApp/login.html')

        if password == account.password:
            account.pk = userpk
            return redirect(f'view_wine/?acc={account.pk}')
        else:
            return render(request, 'MyApp/login.html')
            
    else:
        return render(request, 'MyApp/login.html')
class Account(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    objects = models.Manager()

    def getUsername(self):
        return self.username
    
    def getPassword(self):
        return self.password

    def __str__(self):
        return str(self.pk) + ": " + self.username + ": " + self.password
账户数据存储在账户模型中:

型号.py

from django.shortcuts import render, redirect, get_object_or_404
from .models import *

userpk = None

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        try:
            account = Account.objects.get(username=username)
        except:
            return render(request, 'MyApp/login.html')

        if password == account.password:
            account.pk = userpk
            return redirect(f'view_wine/?acc={account.pk}')
        else:
            return render(request, 'MyApp/login.html')
            
    else:
        return render(request, 'MyApp/login.html')
class Account(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
    objects = models.Manager()

    def getUsername(self):
        return self.username
    
    def getPassword(self):
        return self.password

    def __str__(self):
        return str(self.pk) + ": " + self.username + ": " + self.password

我认为,这是在python中不声明变量
global
的情况,因此,函数中的本地编辑会创建变量的卷影副本,而不会修改函数外部的变量


看一看。关于如何处理全局变量。另外,
account.pk=userpk
您并没有将模型的pk分配给
userpk
变量,而是反过来分配。

只需删除这一行
account.pk=userpk
可能的解决方法是:当用户登录时,您可以在每个视图中访问的请求会话中存储用户pk,以将用户pk保存在userpk中var您可以让userpk=account.pk