Найти - Пользователи
Полная версия: WSGI обработка url-ов
Начало » Python для новичков » WSGI обработка url-ов
1
Rumato
Добрый день! У меня такой вопрос. Есть приложение:
import sys
import os
import eventlet
from eventlet import wsgi
def application(environ, start_response):
    try:
        status = '200 OK'
        f = open(r'./template/base.html')
        output = f.read()
        f.close()
        response_headers = [('Content-type', 'html'),
                        ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
        return [output]
    except:
        status = "500 Error"
        response_headers = [("content-type", "text/plain")]
        start_response(status, response_headers, sys.exc_info())
        return ["Error"]
wsgi.applications = {
  '': application,
  '/map': map111,
  '/test': application
}

Я не могу понять как сделать url-ы, т.е. чтобы можно было перейти по различным адресам и при этом генерировались различные страницы. Думаю как-то в wsgi.applications добавить ссылку — вызов функции, генерации страницы.


Как данной действие можно сделать?

Заранее спасибо!



FishHook
Чем не нравится wergzeug ?
lorien
> Я не могу понять как сделать url-ы, т.е. чтобы можно было перейти по различным адресам и при этом генерировались различные страницы.

В функции applications разбирайте параметры входящего запроса и решайте, что делать дальше, например, заверните логику каждой страницы в отдельную функцию.
Rumato
В продолжение темы, в принципе я более-менее разобрался, вот
def application(environ, start_response):        if environ['PATH_INFO'] == '/':
            status = '200 OK'
            f = open(r'./template/base.html')
            output = f.read()
            f.close()
            response_headers = [('Content-type', 'html'),
                        ('Content-Length', str(len(output)))]
            start_response(status, response_headers)
            return [output]
        elif environ['PATH_INFO'] == '/getdata':
            status = '200 OK'
            f = open(r'./template/send.html')
            output = f.read()
            f.close()
            response_headers = [('Content-type', 'html'),
                        ('Content-Length', str(len(output)))]
            start_response(status, response_headers)
            return [output]
  

А теперь нужно сделать чтобы по адресу /test, переходя в одноименную дирректорию, можно было получить доступ к различным изображениям. Что-то типа http://localhost/test/images.jpg, http://localhost/test/images12.jpg и т.д.
Подскажите, пожалуйста, как такое реализовать.
Что-то типа
  elif environ['PATH_INFO'] == '/test':
            status = '200 OK'
            ссылка на картинку
            берём картинку
            response_headers = [('Content-type', 'image/png'),
                        ('Content-Length', str(len(output)))]
            start_response(status, response_headers)
            return [отдаём картинку]
  
если в адресе http://localhost/test/images.jpg то тогда images.jpg, если какая-то другая то другая картинка (изображения генерируются). Заранее спасибо.
o7412369815963
А позже вам наверно понадобится работа с куками…
Возьмите webob, это обертка на environ,
пример подключения к wsgi или пример с gevent + webob
в webob есть отправка статических файлов и работа с куками
Rumato
Нет, там больше ничего не понадобится, только то что написал. За ссылки спасибо, но хотелось бы разобраться как это без библиотек сделать, тем что есть.
py.user.next
Rumato
но хотелось бы разобраться как это без библиотек сделать
сначала построй точный алгоритм

Rumato
если в адресе http://localhost/test/images.jpg то тогда images.jpg
>>> url = 'http://localhost/test/images.jpg'
>>> fname = url.rsplit('/', 1)[-1]
>>> lpath = 'dir/{}'.format(fname)
>>> print(lpath)
dir/images.jpg
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB