Python 在瓶子上定义一个路由配置文件
我一直在以身作则。我试图将路由提取到一个文件和def,类似于controllers文件夹。我试图模拟的是RubyonRails路由/控制器行为 为了达到这个目的,我首先做了这件事 app/controllers/print.pyPython 在瓶子上定义一个路由配置文件,python,model-view-controller,bottle,Python,Model View Controller,Bottle,我一直在以身作则。我试图将路由提取到一个文件和def,类似于controllers文件夹。我试图模拟的是RubyonRails路由/控制器行为 为了达到这个目的,我首先做了这件事 app/controllers/print.py def index(something=''): return template('printer/index', message='') @app.route('/', method='GET',callback=index) @app.route('/p
def index(something=''):
return template('printer/index', message='')
@app.route('/', method='GET',callback=index)
@app.route('/print', method=['GET', 'POST'])
def printer():
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
def index(something=''):
return template('printer/index', message='')
@app.route('/', method='GET',callback=index)
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
@app.route('/print', method=['GET', 'POST'], callback=printer)
def index(something=''):
return template('printer/index', message='')
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
我做了“something=”,因为python在运行服务器时给了我错误。说
TypeError: index() takes no arguments (1 given)
在那个小把戏之后,服务器运行,一切正常
然后我对/print route执行了相同的操作:
app/controllers/print.py
def index(something=''):
return template('printer/index', message='')
@app.route('/', method='GET',callback=index)
@app.route('/print', method=['GET', 'POST'])
def printer():
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
def index(something=''):
return template('printer/index', message='')
@app.route('/', method='GET',callback=index)
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
@app.route('/print', method=['GET', 'POST'], callback=printer)
def index(something=''):
return template('printer/index', message='')
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
对于此python错误:
SyntaxError: invalid syntax
指向最后一行(EOF)。测试了各种组合,但我被卡住了
OSX10.9,瓶子0.11.6,python 2.7
编辑: 我想我没有解释我自己 我想要的是这样的:
@app.route('/', method='GET')
def index(something=''):
...
@app.route('/print', method=['GET', 'POST'])
def printer(something=''):
...
app/config/routes.py
@app.route('/', method='GET', callback=index)
@app.route('/print', method=['GET', 'POST'], callback=printer)
app/controllers/print.py
def index(something=''):
return template('printer/index', message='')
@app.route('/', method='GET',callback=index)
@app.route('/print', method=['GET', 'POST'])
def printer():
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
def index(something=''):
return template('printer/index', message='')
@app.route('/', method='GET',callback=index)
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
@app.route('/print', method=['GET', 'POST'], callback=printer)
def index(something=''):
return template('printer/index', message='')
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
“something”参数是使其工作的一种变通方法,因为python给了我错误
我无法将路由与DEF分开…这是主要问题。@app.route是一个函数装饰器,因此应该这样使用:
@app.route('/', method='GET')
def index(something=''):
...
@app.route('/print', method=['GET', 'POST'])
def printer(something=''):
...
检查这里:你很接近了。基本上,您只需要将
route
作为函数调用,而不是作为装饰器调用。(删除“@”)
因此,如果在funcs.py
中定义逻辑:
from bottle import template, request, Bottle
def index(something=''):
return template('printer/index', message='')
def printer(something=''):
if request.method == 'POST':
from project.models.Printer import Printer
printer = Printer()
message = printer.show_string(request.forms.get('text'))
return template('printer/index', message=message)
return template('printer/print', message='')
然后,主程序将如何附加回调:
import bottle
import funcs
app = bottle.Bottle()
app.route('/', method='GET', callback=funcs.index)
app.route('/print', method=['GET', 'POST'], callback=funcs.printer)
app.run(host='127.0.0.1', port=8080)
当我运行
python routes.py
时,它按预期工作:
% 12:44:32 ~/>curl http://127.0.0.1:8080/print
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Error: 500 Internal Server Error</title>
...
</head>
<body>
<h1>Error: 500 Internal Server Error</h1>
<p>Sorry, the requested URL <tt>'http://127.0.0.1:8080/print'</tt>
caused an error:</p>
<pre>Template 'printer/print' not found.</pre>
</body>
</html>
%12:44:32~/>http://127.0.0.1:8080/print
错误:500内部服务器错误
...
错误:500内部服务器错误
抱歉,请求的URL';http://127.0.0.1:8080/print'
导致错误的原因:
模板';打印机/打印和#039;没有找到。
(HTTP 500,因为找不到模板,但关键是它运行了
funcs.printer()
)它对我不起作用。给了我404个错误。即使我没有使用模板,我也使用了“hello”,但它也不起作用。我也像‘python runserver.py’一样运行(我像链接上说的那样使用)。。。我实际上只是复制了我的两个代码块,运行了它们,它按预期工作(HTTP 500)。和你一样,我也使用OSX 10.9、瓶子0.11.6和Python 2.7。你确定你准确地复制了我的代码,没有修改它,并将其与我的curl
示例调用相同吗?