2012-06-29 3 views
3

Прежде чем использовать mod_python для сайтов python. К сожалению, mod_python больше не обновляется, поэтому я искал другую структуру и нашел mod_wsgi.python webpage mod_wsgi

В mod_python можно было иметь индексный метод, а также другие методы. Я хотел бы иметь более одной страницы, которая будет вызвана. Что-то вроде этого:

def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 

    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 

    return [output] 

def test(environ, start_response): 
    status = '200 OK' 
    output = 'Hello test!' 

    response_headers = [('Content-type', 'text/plain'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 

    return [output] 

Это возможно с mod_wsgi?

РЕШЕНИЕ: Колбу структура делает то, что мне нужно

#!/usr/bin/python 
from flask import Flask 
from flask import request 
app = Flask(__name__) 
app.debug = True 
@app.route("/") 
def index(): 
    return "Hello index" 

@app.route("/about")#, methods=['POST', 'GET']) 
def about(): 
    content = "Hello about!!" 
    return content 

if __name__ == "__main__": 
    app.run() 
+0

Конечно, это возможно. Как вы думаете, что все эти фреймворки Python, использующие mod_wsgi, работают? –

+0

У вас есть пример? Все учебники, которые я нахожу, только печатают «Hello World!». пример. – user1408786

+1

Не пытайтесь писать raw mod_wsgi. Используйте фреймворк - либо маленький, такой как Flask, либо полный стек, такой как Django. Затем вы получите правильную маршрутизацию URL-адресов на столько функций, сколько хотите. –

ответ

4

WSGI является общей точкой входа для WebApps, что сказал, причина, почему вы найдете только привет мир в поисках mod_wsgi является то, что вам «искать mod_wsgi, а не для среды, реализующей стандарт.

Посмотрите как таковой, wsgi немного похож на лук. Веб-сервер отправляет запрос на ваш вызываемый. с двумя параметрами: environ и start_response. Насколько я могу сказать start_response, функция, которая отправит ваши заголовки и окружение, где все параметры сохранены.

Вы можете катить свой собственный каркас или использовать что-то вроде пирамиды, колбы и так далее. Каждая из этих фреймворков может быть связана с wsgi.

Затем вы создаете промежуточное программное обеспечение wsgi, которое будет обрабатывать запрос. Затем вы можете разобрать «PATH_INFO», чтобы разделить различные вызовы.

def my_index(environ): 
    response_headers = [('Content-type', 'text/plain')] 
    return response_headers, environ['PATH_INFO'] 

def application(env, st): 
    response = None 
    data = None 
    if environ['PATH_INFO'] == '/index': 
     response, data = my_index(environ) 

    st('200 ok', response) 

    return [data] 

Это довольно простой пример, но с окружающей средой вы можете делать все, что хотите. Сам по себе wsgi не делает ничего из того, с чем вы могли привыкнуть с mod_python. Это действительно просто интерфейс для python для веб-серверов.

редактировать

Как другой сказал в комментариях, не пытайтесь свернуть свой собственный, если вы не имеете ни малейшего представления о том, что вы делаете. Подумайте об использовании других фреймворков и узнайте больше об этом в первую очередь.

Например, вам необходимо написать правильный способ привязки функции к URL-адресу. Как я писал в моем примере довольно плохо, но должен дать представление о том, как это делается в фоновом режиме. Вы можете обрабатывать запрос с использованием регулярного выражения для извлечения идентификаторов или использовать нечто похожее на обход для пирамиды и zope.

Если вы действительно настаиваете на том, чтобы кататься самостоятельно, взгляните на учебник по webob.

http://docs.webob.org/en/latest/do-it-yourself.html

+0

Спасибо, я попробую рамки. Я почти начал создавать один сам. Но рамки сэкономит мне много времени. – user1408786

Смежные вопросы