Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Web programming Python [closed]

Tags:

python

php

I'm a amateur developer with a little experience in PHP.

I recently learnt Python, I've to admit that it is awesome as a programming language and its great libraries, but using that for web development seems to be a big pain in the ass. As far as what i read, I've to use CGI, mod_wsgi, etc. to deploy (http://docs.python.org/howto/webservers.html), Restart the server to see the changes (http://stackoverflow.com/questions/581038/python-web-programming)

My question is, Python being used so widely for web development, Why cant it be as simple as PHP?

ie i would love to write index.py:

print """
<html>
<head>
<title>Hello world</title>
</head>
<body>
Hello world
</body>
</html>"""
like image 735
Jelly Avatar asked Apr 16 '12 04:04

Jelly


4 Answers

First to your question on why Python isn't as easy for web development as PHP: It hasn't been designed for it. PHP has had a lot of work towards making it a good language to write HTML pages in, including mod_php for apache. Python, while it is a very capable web language, it is also capable of far more than PHP. For example, the majority of Dropbox's software, both the desktop client and the server side code is Python. I use Python in my day job and have used it to integrate legacy C code into new Python code via Cython.

Moving on. There are a number of Python frameworks out there that can make your web development experience far less complicated. 2 of note that are widely used professionally and by hobbyists are Django and Pyramid (formerly Pylons). As a new user I'd recommend you start with Django, it's a great way to get started and can be used for large and complex sites (and more) as your experience grows.

You will find that Django and Pyramid include "development servers". These are web servers written in Python that are packaged with the frameworks to enable faster development. Using these development servers you can get up and running very quickly.

There are also pure Python web servers that are infact incredibly fast, robust and very production ready. To deploy a Pyramid application on Gunicorn, a very good Python server, only takes a couple of extra lines in your Pyramid configuration. Typically you would reverse proxy to these pure Python servers via Apache or Nginx.

If you want to go the Apache server route, you just need mod_wsgi. Serving a Python site with mod_python or as a CGI is a somewhat outdated way of doing it. WSGI defines a standard for Python to handle web requests so mod_wsgi enables apache to pass requests to your Python application in the expected format.

When it comes to deploying Python to a hosting provider, you have to look a little further than you would for PHP hosting, but there is a good list maintained on the official Python wiki. The 4 links at the bottom provided different lists to meet your requirements.

like image 55
Endophage Avatar answered Oct 25 '22 00:10

Endophage


[If] Python being used so widely for web development, Why cant it be as simple as PHP? ie i would love to write index.py...

Python can be as simple as PHP, as per your example. The simplest way to make the above work is to use CGI (and call your file index.cgi rather than index.py, then your script will work just fine. Though you should really specify the content type first, like this:

print 'Content-type: text/html'

This would apply in PHP as much as Python. Python's CGI module will get you up and running very quickly.

As far as what i read, I've to use CGI, mod_wsgi, etc. to deploy

You would normally choose one or the other, and realistically you would most likely choose a framework which is based on the more modern WSGI and not worry about the low-level stuff. But if you don't want to, you don't need to bother with these low-level interfaces.

Restart the server to see the changes

Probably not. Having to restart the server is a limitation of the framework and deployment configuration, and is typically not required. If you use mod_python this may apply, but generally not (many frameworks support auto-reloading, for example).

Python has a great wealth of resources for web development. There are bare-bones systems (eg. CGI, mod_wsgi), lightweight systems (eg. CherryPy) and entire frameworks (eg. Zope). You can choose one that best suits your needs.

Being able to create a simple file and produce some output might help get something going quickly, but it is not really a sign of a rich, mature, featureful framework. Sure, you can start displaying something straight away, but what then? All of a sudden you will need to either import or write all the same sorts of functionality that web frameworks provide. For a non-trivial web app, you need non-trivial framework.

For example, something like Django will give you a persistence framework, auto-generated admin interface, a tempting language, URL dispatch system, and much more. You can focus on your app logic, and not worry about the lower level details. Django is a good place to start, as it has great documentation and the tutorial will get you going very quickly.

like image 36
gavinb Avatar answered Oct 25 '22 00:10

gavinb


As others have said, google "python web framework". There are quite a few, they are all quite different. To get you started the fastest (hours), I'd look at bottle.py.

like image 1
Yves Dorfsman Avatar answered Oct 24 '22 23:10

Yves Dorfsman


Python being used so widely for web development, Why cant it be as simple as PHP?

Because Hello World don't scale. Because Python ain't PHP. From wikipedia[1] [2]:

  • Python is a general-purpose, high-level programming language
  • PHP is a general-purpose server-side scripting language originally designed for Web development

Python is great, python is DRY friendly. Unfortunately, when it comes to web developement, DRY isn't enough. If you actually want to get things done (efficiently): don't reinvent the wheel. That was pretty well summarized here:

What seems the biggest shame to me is that everyone is currently rebuilding this stuff over and over again and rationalizing it as some sort of secret sauce competitive advantage when it’s really infrastructure – stuff that really should be standardized so you can actually get around to doing the new and interesting stuff.

So, use the right tool for the right job, if you go the python way:

  • use python and
  • use a web framework, Django is great (or another one)
  • reuse packages, browse them at django-packages
  • maybe use a "meta-framework" like Pinax to get started
  • use Twitter Bootstrap as an UI framework
  • use a PaaS like Heroku to deploy (or another one)

Yeah it's more complicated than a hello world but remember there ain't no such thing as a free lunch. You're an amateur developer, you're not a professional coder and a sysadmin and a database admin and a designer and a system architect, etc. Don't be too shy to stand on the shoulders of giants because now, it's free. Please, don't build nothing less than a modern web app.

Also, PHP isn't anymore popular as it was [1][2], cf. PHP's fractal bad design, PHP hammer, etc.

like image 1
Maxime R. Avatar answered Oct 25 '22 00:10

Maxime R.