Невозможно вызвать функцию для создания объекта в функции @route, даже если она работает на интерпретаторе Python - PullRequest
0 голосов
/ 21 ноября 2018

Я создаю базу данных для школьного проекта и выполняю бэкэнд между ним и приложением (для этого я использую Flask и SQLAlchemy)

Так что проблема в том, что я не могу вызватьфункция User (входы), функция User () - это конструкторская функция, используемая для создания и объекта, ну, по крайней мере, для меня это выглядит так.Но сама функция работает, когда я делаю это в интерпретаторе.

ПОЧЕМУ я могу сделать это в моем интерпретаторе и не могу сделать это на крошечной веб-платформе фляги ???

вотgithub link: BackEndRepository

Прежде чем взглянуть на примеры, вот вывод из интерпретатора, который работает: Interperter

вот код для моегоroute:

from app import app,db
from models import User
from flask import render_template,Flask,request,redirect,url_for

@app.route('/index')
def index():
    return "Hello, World!"

@app.route('/teste')
def teste():
    users = db.session.query(User).all()
    return u"<br>".join([u"{0}: {1}".format(user.name, user.email) for user in users])

@app.route('/teste2')
def teste2():
    teste=User(name='susan',email='susan@example.com')
    #u = User(name=request.args.get('1'), email=request.args.get('2'))
    return teste

А вот код для моей модели:

from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)

    def __init__(self,name,email):
        self.name = name
        self.email= email

    def __repr__(self):
        return '<User {0} {1}>'.format(self.name,self.email)    

, поэтому я запускаю в своем терминале «колбу» и получаю сообщение об ошибке: (theese allжурнал, который у меня был после выполнения того, что я объяснил)

@Arthur:~/Public/ProjetoBackEnd(Original)$ flask run
* Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [21/Nov/2018 14:24:41] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [21/Nov/2018 14:24:41] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [21/Nov/2018 14:24:46] "GET /index HTTP/1.1" 200 -
127.0.0.1 - - [21/Nov/2018 14:24:46] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [21/Nov/2018 14:24:52] "GET /teste HTTP/1.1" 200 -
127.0.0.1 - - [21/Nov/2018 14:24:53] "GET /favicon.ico HTTP/1.1" 404 -
[2018-11-21 14:24:57,004] ERROR in app: Exception on /teste2 [GET]
Traceback (most recent call last):
  File "/home/arthur/.local/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/arthur/.local/lib/python2.7/site-packages/flask/app.py", line 1816, in full_dispatch_request
    return self.finalize_request(rv)
  File "/home/arthur/.local/lib/python2.7/site-packages/flask/app.py", line 1831, in finalize_request
    response = self.make_response(rv)
  File "/home/arthur/.local/lib/python2.7/site-packages/flask/app.py", line 1982, in make_response
    reraise(TypeError, new_error, sys.exc_info()[2])
  File "/home/arthur/.local/lib/python2.7/site-packages/flask/app.py", line 1974, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/home/arthur/.local/lib/python2.7/site-packages/werkzeug/wrappers.py", line 921, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/home/arthur/.local/lib/python2.7/site-packages/werkzeug/test.py", line 923, in run_wsgi_app
    app_rv = app(environ, start_response)
TypeError: 'User' object is not callable
The view function did not return a valid response. The return type must be a string, tuple, Response instance, or WSGI callable, but it was a User.
127.0.0.1 - - [21/Nov/2018 14:24:57] "GET /teste2 HTTP/1.1" 500 -
127.0.0.1 - - [21/Nov/2018 14:24:57] "GET /favicon.ico HTTP/1.1" 404 -

ПРОСТО выделяет ту часть, которая меня больше всего беспокоит: TypeError: объект 'User' не вызывается

1 Ответ

0 голосов
/ 21 ноября 2018

Проблема здесь:

@app.route('/teste2')
def teste2():
    teste=User(name='susan',email='susan@example.com')
    #u = User(name=request.args.get('1'), email=request.args.get('2'))
    return teste

Вы return ing teste, что User.Это недопустимый тип возвращаемого значения, так как ошибка говорит вам:

The return type must be a string, tuple, Response instance, or WSGI callable, but it was a User.

Можно, например, вернуть string, поэтому это должно работать:

@app.route('/teste2')
def teste2():
    teste=User(name='susan',email='susan@example.com')
    #u = User(name=request.args.get('1'), email=request.args.get('2'))
    return teste.name
...