Tiago Becker
tiagobecker at gmail.com
Sun Aug 31 11:39:55 EDT 2008
Oh, cool, i didnt know that req.construct_url() would do the trick, thanks a lot! > In web applications I would regard it as bad practice to hard wire > into configuration files URLs for the same site which incorporate the > name of the site, which seems to be what you are doing here. Ok, i can take your word for that, but could you elaborate on why is it a bad practice? Since the url would be supplied (spelling?) by apache itself. I dont see whats wrong with that. It's not that i would write myVar = 'http://hostname etc' on my cfg (this i can see it would be wrong) on php i would do myVar = $_SERVER['hostname'] or something like it I just want to know why because I don't understand your reasons for saying that... Maybe i coded in php for far too long :-) Sorry about the reply stuff and thank you for you patience :-D On Sun, Aug 31, 2008 at 6:56 AM, Graham Dumpleton < graham.dumpleton at gmail.com> wrote: > 2008/8/31 Graham Dumpleton <graham.dumpleton at gmail.com>: > > ---------- Forwarded message ---------- > > From: Tiago Becker <tiagobecker at gmail.com> > > Date: 2008/8/31 > > Subject: Re: [mod_python] Server address > > To: Graham Dumpleton <graham.dumpleton at gmail.com> > > > > > > Well, i will probably use more than one .py file... I dont want to > > copy all the configuration on each file... > > Besides, i work with 5 other developers, each one with their own > > virtual server and having to configurate every developer enviroment > > seems too much trouble to maintain.. > > > > Well, i could import my CFG file inside the function, that would make > > the request available (i think :-))... i just wanted to know if there > > was any other way to do it. > > > > The fact is that im coming from php where i had a global cfg file for > > all the url configurations.. All i want with that is to have a config > > file that will get the urls (and others variables) needed so no one > > has to worry about that. > > PHP is hardly the indicator of good practice. > > In web applications I would regard it as bad practice to hard wire > into configuration files URLs for the same site which incorporate the > name of the site, which seems to be what you are doing here. > > The configuration file can contain an absolute path to a page, but it > should not be a fully formed HTTP address. Any code generating a > response which requires a fully formed HTTP address should take that > absolute path and feed it into req.construct_url(). This maps to an > internal Apache function which will fill it out to be a fully formed > HTTP address with all the correct hostname and port information as > matches what the original request to the site used. > > In other words, if you do things the correct way of using > req.construct_url() you don't need to hardwire your hostname into your > global configuration files. > > If for some reason the code generating the response doesn't have > access to the request object, then you should be looking at Python > features such as thread locals to stash away some request information > that can then be accessed by code directly which otherwise didn't get > passed the request object. This would allow it then to get hold of the > request object and call the construct_url() function. > > That all said, why do you even need a fully formed HTTP address? If > you are including that in pages for the same site then that also could > be considered bad practice. You should just use an absolute, or better > still a relative path, in any href attributes of a HTML anchor tag, > not a full formed HTTP address. > > > Re-reading my post, i saw that i wasnt clear enough :-) > > I knew what you wanted. I questioned it because it seemed to be a poor > way of doing it. > > BTW, please use reply-all and keep followups on mailing list. > > Graham > > > Thanks for you answers and your patience with my 'english' :-) > > > > > > On Fri, Aug 29, 2008 at 8:47 PM, Graham Dumpleton > > <graham.dumpleton at gmail.com> wrote: > >> > >> 2008/8/30 Tiago Becker <tiagobecker at gmail.com>: > >> > Hello guys! > >> > > >> > Im trying to make my own framework for mod python, because none of the > >> > available suited my needs. > >> > > >> > Im trying to get the server address, without the request object, but i > >> > couldnt find in the documentation.. is that possible? > >> > > >> > > >> > Heres why i need it: i import apache and a configuration file, but > that > >> > config need to know the server address.. as i import the files prior > to the > >> > function that handles the request, i dont have the req object... > >> > > >> > from mod_python import apache > >> > import sys, os > >> > > >> > #my cfg > >> > CFG = apache.import_module('cfg/cfg') > >> > CFG.LOCAL_PATH = os.path.dirname( __file__ ) > >> > > >> > ..other imports etc > >> > > >> > def index(req): > >> > #this is ther var i would like to get outside the function > >> > CFG.URL = 'http://' + req.hostname > >> > >> Sounds like you are going about it the wrong way. Can you give a > >> better reason why you need it. > >> > >> First off, the only server details you can get outside of the context > >> of a request are those for the main server. If requests are handled > >> within the context of a VirtualHost then you can't do it. For main > >> server details do: > >> > >> from mod_python import apache > >> print apache.main_server.server_hostname > >> > >> Documentation at: > >> > >> http://www.modpython.org/live/current/doc-html/pyapi-apmem.html > >> http://www.modpython.org/live/current/doc-html/pyapi-mpserver.html > >> http://www.modpython.org/live/current/doc-html/pyapi-mpsrv-mem.html > >> > >> If you need to construct URLs for use inside of a request, you should > use: > >> > >> req.construct_url('/some/path') > >> > >> Documetation at: > >> > >> > http://www.modpython.org/live/current/doc-html/pyapi-mprequest-meth.html > >> > >> Graham > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20080831/6b4a99e0/attachment.html
|