On Tue, Nov 11, 2014 at 6:26 PM, Larry Martell <larry.mart...@gmail.com> wrote: > On Tue, Nov 11, 2014 at 12:18 PM, Marc Aymerich <glicer...@gmail.com> wrote: >> On Tue, Nov 11, 2014 at 5:43 PM, Larry Martell <larry.mart...@gmail.com> >> wrote: >>> On Tue, Nov 11, 2014 at 11:00 AM, Marc Aymerich <glicer...@gmail.com> wrote: >>>> On Tue, Nov 11, 2014 at 4:48 PM, Larry Martell <larry.mart...@gmail.com> >>>> wrote: >>>>> >>>>> I have a PHP app that I want to convert to django. But I want to do it >>>>> stages. All the heavy lifting is in the PHP code, so first, I want to >>>>> just use templates and views to generate the HTML, but still call the >>>>> PHP code. Then later convert the PHP to python. >>>>> >>>>> My issue is that the PHP code expects to get all it's input from the >>>>> REQUEST object and I've consumed that in the view. Is there any way I >>>>> can somehow supply that to the PHP code? >>>>> >>>>> Is there some way python can communicate like curl ... it needs to >>>>> send the request string in the body of a POST request to the URL that >>>>> will route to the PHP script and get the output back. >>>> >>>> >>>> Yes, >>>> I supose you can extract the needed information from the django >>>> Request object and call the php script passing the needed variables as >>>> environment state. >>>> >>>> as a guideline you can do something like >>>> >>>> cmd = ( >>>> 'REDIRECT_STATUS=200 ' >>>> 'REQUEST_METHOD=GET ' >>>> 'SCRIPT_FILENAME=htdocs/index.php ' >>>> 'SCRIPT_NAME=/index.php ' >>>> 'PATH_INFO=/ ' >>>> 'SERVER_NAME=site.tld ' >>>> 'SERVER_PROTOCOL=HTTP/1.1 ' >>>> 'REQUEST_URI=/nl/page ' >>>> 'HTTP_HOST=site.tld ' >>>> '/usr/bin/php-cgi' >>>> ) >>>> subprocess.Popen(cmd, stdout=subprocess.PIPE) >>> >>> Thanks very much Marc. In the example, how is the request string passed in? >> >> >> Yeah, a more complete example would be >> >> cmd = ( >> 'REDIRECT_STATUS={status} ' >> 'REQUEST_METHOD={method} ' >> 'SCRIPT_FILENAME={file} ' >> 'SCRIPT_NAME=/index.php ' >> 'PATH_INFO={path} ' >> 'SERVER_NAME=site.tld ' >> 'SERVER_PROTOCOL=HTTP/1.1 ' >> 'REQUEST_URI={path} ' >> 'HTTP_HOST=site.tld ' >> '/usr/bin/php-cgi' >> ).format( >> status=request.status, >> method=request.method, >> path=request.path, >> file=my_php_path_mapper(request.path), >> ) >> >> php = subprocess.Popen(cmd, stdout=subprocess.PIPE) >> response, err = php.communicate() >> if php.return_code != 0: >> return ResponseError(content=err) >> return Response(content=response) >> >> >> still incomplete and mostly wrong, but good enough to illustrate the >> main pattern :) > > > So I would put the contents of what I want in the request object in > the file request.path?
I just invented the attribute names that django actually uses, but you can look at the excellent django documentation for the correct ones https://docs.djangoproject.com/en/dev/ref/request-response/ still this is a toy example and probably it would be a pain in the ass to really map the mixed URLs between the two web applications. -- Marc -- https://mail.python.org/mailman/listinfo/python-list