cenyongh wrote:
> My method is based on this. And I add defer support which I think it is
> the most important reason for why we integrate these two frameworks.

Could you add your version to the Trac ticket #172 and reopen it as an
enhancement? Another way to do it is to open a new enhancement ticket
with your code attached, and a reference to #172 as a prior art. This
way it is not lost and will be reviewed for possible inclusion in the
due time.

Thanks,

Eugene

> 
> ------------------------------------------------------------------------
> *发件人:* django-developers@googlegroups.com
> [mailto:[EMAIL PROTECTED] *代表
> *Rafael SDM Sierra
> *发送时间:* 2006年10月12日 0:10
> *收件人:* django-developers@googlegroups.com
> *主题:* Re: Make django run on top of twisted
> 
> I'm looking for this a few days ago and found it:
> http://code.djangoproject.com/ticket/172
> 
> On 10/11/06, [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>*
> <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> wrote:
> 
> 
>     Someone has submit a method before.He use twsited WSGIResource to wrap
>     the django'WSGIHandler .But this method can not support Defer. The
>     whole structure of this method is similiar to these diagram:
>          (Twisted)                        (Django)
>     WSGIResource
>              |
>             \/
>     WSGIHandler          -->      WSGIHandler
> 
>     When http request come in WSGIResource will create a new Twisted
>     WSGIHandler then this new created Handler will ask Django's WSGIHandler
>     to process the request,after the response send back by django's
>     handler,twisted handler will write it back to the client.
> 
>     But if the django's handler send back a defer,the whole train will
>     break.
> 
>     My method has to subclass all the class in the diagram
> 
>     class WrapDjangoWSGIHandler( BaseHandler ):
>         def __call__( self, environ, start_response ):
>             from django.conf import settings
> 
>             if settings.ENABLE_PSYCO:
>                 import psyco
>                 psyco.profile()
> 
>             # Set up middleware if needed. We couldn't do this earlier,
>     because
>             # settings weren't available.
>             if self._request_middleware is None:
>                 self.load_middleware ()
> 
>             dispatcher.send( signal=signals.request_started )
>             try:
>                 request = WSGIRequest( environ )
> 
>                 #   modified by cenyongh to support defer
>                 di = defer.maybeDeferred( self.get_response, request.path,
>     request )
>                 def cb( response ):
>                     return self.done( response, start_response )
>                 di.addCallback( cb )
>             finally:
>                 dispatcher.send( signal=signals.request_finished )
> 
>             return di;
> 
>         def done( self, response, start_response ):
>             # Apply response middleware
>             for middleware_method in self._response_middleware:
>                 response = middleware_method( request, response )
>             try:
>                 status_text = STATUS_CODE_TEXT[ response.status_code]
>             except KeyError:
>                 status_text = 'UNKNOWN STATUS CODE'
>             status = '%s %s' % ( response.status_code, status_text )
>             response_headers = response.headers.items ()
>             for c in response.cookies.values():
>                 response_headers.append( ( 'Set-Cookie', c.output(
>     header='' ) ) )
>             start_response( status, response_headers )
>             return response
> 
>     class WrapTW2WSGIResource( wsgi.WSGIResource ):
>         def renderHTTP( self, req ):
>             from twisted.internet import reactor
>             # Do stuff with WSGIHandler.
> 
>             #   modified by cenyongh to support defer
>             handler = WrapTW2WSGIHandler( self.application, req )
> 
>             # Get deferred
>             d = handler.responseDeferred
>             # Run it in a thread
>             reactor.callInThread( handler.run )
>             return d
> 
>     class WrapTW2WSGIHandler( wsgi.WSGIHandler ):
>         def run( self ):
>             from twisted.internet import reactor
>             # Called in application thread
>             try:
>                 result = self.application ( self.environment,
>     self.startWSGIResponse )
> 
>                 #   modified by cenyongh to support defer
>                 def cb( response ):
>                     self.handleResult( [response.content] )
>                 result.addCallback( cb )
> 
>             except Exception, e:
>                 if not self.headersSent:
>                     reactor.callFromThread( self.__error, failure.Failure()
>     )
>                 else:
>                     reactor.callFromThread( self.stream.finish,
>     failure.Failure() )
> 
> 
> 
>     Then the server should be construt like this
>     test = WrapTW2WSGIResource( WrapDjangoWSGIHandler() )
>     site = server.Site( test )
> 
> 
>     I have test with the views.py like this? And it get work.
>     def index( request ):
>         return render_to_response( 'world/index.html', {} )
> 
> 
>     def dindex( request ):
>         def cb( raw_html ):
>             return render_to_response( 'world/index.html', {} )
> 
>         d = client.getPage( "http://www.gmail.com"; )
>         d.addCallback( cb )
>         return d
> 
> 
> 
> 
> 
> 
> 
> -- 
> SDM Underlinux
> Garimpar.com <http://Garimpar.com>
> --
> PEP-8
> Só existem 3 tipos de pessoas no mundo, as que sabem contar, e as que
> não sabem.
> CPFL - Compania Piratininga de FALTA de Luz (6 vezes em 5 dias!!)
> 
> > 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers
-~----------~----~----~----~------~----~------~--~---

Reply via email to