Django 服务获取请求

Django serve get-requests

大家好,我是 Django 的新手。我想要实现的是一个 URL ,我可以通过我的应用程序的 GET 请求访问它,并传递一些值。 我在 Django 中有一个 UserProfile 模型,它与 User 具有 oneToOneField 关系。我想用我的 GET 请求传递电子邮件,并用这封电子邮件找到一个用户实例,然后我想再传递两个值,我想将它们与这个用户 UserProfile 属性进行比较。
但我没有非常了解如何实现这一目标。这是我拥有的:

在我的 views.py

def check(request):
try:
    email = request.GET.get('email', '')
    osusername = request.GET.get('osusername', '')
    computername = request.GET.get('computername','')
except TypeError:
    return HttpResponseBadRequest()

user = get_object_or_404(User.objects.filter(user__email=email)[0])

在我的 urls.py

urlpatterns = patterns('',
url(r'^check/$', 'myapp.views.check'),)

但是我如何比较例如计算机名与该用户的 User.UserProfile.computername?不管怎么写都是错的

我的 UserProfile 模型按照要求 @comments:

class UserProfile(models.Model):

user = models.OneToOneField(User, related_name='profile')
computername = models.CharField("Computername", max_length=150, blank=False)
osusername = models.CharField("Osusername", max_length=150, blank=False)

所以您 get_object_or_404 的语法是错误的。您不向它传递对象:它为您获取对象。所以:

user = get_object_or_404(User, email=email)

现在你已经有了一个 User 实例,你想获得相关的配置文件,所以你可以这样做:

 profile = user.userprofile

或者,如果您不需要其他任何实际用户实例,直接获取配置文件可能更容易:

 profile = get_object_or_404(UserProfile, user__email=email)

现在可以查看相关属性:

 osusername == profile.osusername
 computername == profile.computername

您需要先通过以下方式检索用户实例:

try:
    a_user = User.objects.get(email=email)
except User.DoesNotExist:
    # error handling if the user does not exist

然后,通过以下方式获取对应的UserProfile对象:

profile = a_user.userprofile

然后,您可以从 UserProfile 对象中获取 osusername 和 computername:

profile.osusername
profile.computername

作为 .

的补充

如果在多个视图上检查相关属性是一项常见任务,那么也值得在您的 UserProfile 模型中创建一个方法来执行所需的验证检查。

class UserProfile(object):
    # various attributes ...

    def check_machine_attributes(self, os_username, computer_name):
        if os_username == self.osusername and computername == self.computername:
            return True
        return False

在你看来你可以这样做:

if profile.check_machine_attributes(osusername, computername):
    # ...
else:
    # ...