【问题标题】:How to get a INT or STR from VAR with function return?如何通过函数返回从 VAR 获取 INT 或 STR?
【发布时间】:2019-08-30 22:29:31
【问题描述】:

我正在获取用户 ID,我需要 INT 格式的用户 ID,但我只能通过函数返回来获取。如何从函数转换为 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

【问题讨论】:

  • 你需要调用该函数。
  • 但是无论如何,您不能在视图之外提出请求。这段代码没有任何意义。
  • @Sayse,请问我如何调用该函数?
  • @DanielRoseman 我确实在 Django Shell 中使用了这段代码来模拟我需要的东西。如果您有任何建议,我很感激知道。谢谢。
  • 没有。显示您的实际视图代码和您在浏览器中遇到的错误。

标签: python django


【解决方案1】:

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

to_DB:

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

get_userid:

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

为了尽可能有建设性,您在这里遇到了基本的 Python 概念。你真的需要回去做一个 Python 入门教程,然后是 Django 教程。

【讨论】:

  • 非常感谢您的帮助和时间。我是 Python 和 Django 的初学者,这是真的。你的技巧对我帮助很大。我很感激!
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2022-09-23
  • 2012-10-24
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多