如何通过函数返回从 VAR 获取 INT 或 STR?



我正在获取用户ID,我需要INT格式的它,但我只得到函数返回。如何从函数转换为 INT?我使用的是Django 2.1.7和python 3.7。

from django.contrib.auth import authenticate
from django.http import HttpRequest
request=HttpRequest
username='myuser'
password='mypass'
user = authenticate(username=username, password=password)
def user_id(request):
UID = request.user
return(UID)
UID=user_id
print(type(UID))
<class 'function'>
print(UID)
<function user_id at 0x106cd9158>
print(user.id)
19 

views.py:
def get_userid(request):
if User.is_authenticated:
UID = request.user.id 
return (UID)
if User.is_anonymous:
UID = 14
return (UID)
def opsearch(request):
item = request.POST['item']
dic = MLRun(item)
return render(request, 'main/layout/results.html', {'dictionary': dic})

我的代码调用模板:

def to_DB(item, dic):
UID = get_userid
date_started = (timezone.now())
item_searched = item
Q = OPQuery(date_started=date_started, 
item_searched=item_searched, id_user=UID)
Q.save()
QID = Q.id
QUID = OPQuery.objects.get(id=QID)

错误:

TypeError at /main/search/
int() argument must be a string, a bytes-like object or a number, not 'function'
Request Method: POST
Request URL:    http://127.0.0.1:8000/main/search/
Django Version: 2.1.7
Exception Type: TypeError
Exception Value:    
int() argument must be a string, a bytes-like object or a number, not 'function'
Exception Location: /usr/local/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/fields/__init__.py in get_prep_value, line 1807
Python Executable:  /Users/Documents/PycharmProjects/OP/bin/python
Python Version: 3.7.2

这段代码真的充满了问题。以下是其中的一些。

to_DB

  • 您实际上并不调用get_userid函数,而只是引用它。这是您立即错误的原因。在 Python 中,你总是需要使用()来调用函数。
  • 您不会将request参数传递给该函数。
  • 您不会从该函数返回任何内容。
  • 既然您已经创建了 OPQuery 对象,为什么还要立即从数据库中查询回来?你已经有了它。
  • 您不会在此处使用dic参数。

get_userid

  • is_authenticated需要在当前用户实例上调用,而不是在用户类上调用。应该是request.user.is_authenticated.
  • 同样适用于is_anonymous.
  • 返回值不需要括号。
  • 无论如何,这整个功能毫无意义。

尽可能具有建设性,你在这里正在努力解决基本的Python概念。你真的需要回去做一个介绍性的Python教程,然后是Django教程。

最新更新