Javascript MVC e python SimpleHTTPServer

Eu queria uma maneira rápida de configurar uma maneira de desenvolver um aplicativo JS de página única usando Backbone.js e SimpleHTTPServer do python.

Estou usando pushState para lidar com o roteamento de url e gostaria que as páginas funcionassem se fossem recarregadas ou visitadas diretamente.

Aqui está um pequeno módulo python que deve servir corretamente os arquivos de ativos, se eles existirem, caso contrário, faça o streaming do arquivo index.html

import SimpleHTTPServer, SocketServer, urlparse, os

class Handler( SimpleHTTPServer.SimpleHTTPRequestHandler ):
def do_GET( self ):
urlParams
= urlparse.urlparse(self.path)
if os.access( '.' + os.sep + urlParams.path, os.R_OK ):
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self);
else:
self.send_response(200)
self.send_header( 'Content-type', 'text/html' )
self.end_headers()
self.wfile.write( open('index.html').read() )

httpd
= SocketServer.TCPServer( ('127.0.0.1', 8000), Handler )
httpd
.serve_forever()

class Handler( SimpleHTTPServer.SimpleHTTPRequestHandler ):

O objeto Handler herda de SimpleHTTPServer.SimpleHTTPRequestHandler

def do_GET( self ):
urlParams
= urlparse.urlparse(self.path)
if os.access( '.' + os.sep + urlParams.path, os.R_OK ):
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self);

Aqui, substituímos o método do GET. Em seguida, verifique se há um arquivo físico para a url solicitada, provavelmente uma imagem, arquivo js ou css. Se algum for encontrado, passamos o processo para o método SimpleHTTPRequestHandler.do GET. Portanto, as coisas se comportam normalmente.

else:
self.send_response(200)
self.send_header( 'Content-type', 'text/html' )
self.end_headers()
self.wfile.write( open('index.html').read() )

Caso contrário, transmitimos o conteúdo do arquivo index.html, porque essa provavelmente é uma rota específica do aplicativo.

Aqui, criamos uma conexão http para 12.7.0.0.1 (localhost) na porta 8000. Portanto, http: // localhost: 8000 .

httpd = SocketServer.TCPServer( ('127.0.0.1', 8000), Handler )
httpd
.serve_forever()

Para iniciar, basta salvar o arquivo (algo como http-server.py). Em seguida, execute o seguinte em sua linha de comando:

$: python http-server.py

Agora você deve ser capaz de abrir o url http: // localhost: 8000 em seu navegador e obter o comportamento pushState desejado.