home.pl & django - pierwsza potyczka

home.pl obsługuje pythona jako cgi (pliki .py) więc tego będziemy się trzymać. Instalację wykonamy w katalogu /py

instalacja django

hardcoded ale działa ;) wrzucamy to do /py i ruchamiamy poprzez www (plik install.py)

1
2
3
4
5
6
7
8
9
    #!/usr/bin/env python

    import os

    os.system("wget http://www.djangoproject.com/download/1.0.2/tarball/")
    os.system("tar zxf Django-1.0.2-final.tar.gz")
    os.system("rm Django-1.0.2-final.tar.gz")
    os.system("mv Django-1.0.2-final tmp")
    os.system("mv tmp/django django")

nasz projekt

Lokalnie wołamy

    $ django-admin.py startproject pytest

i wrzucamy katalog pytest przez ftp na home do katalogu /py .

dispatch.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
    #!/usr/bin/env python

    import os, sys
    import django.core.handlers.wsgi

    def run_with_cgi(application):

        environ                      = dict(os.environ.items())
        environ['wsgi.input']        = sys.stdin
        environ['wsgi.errors']       = sys.stderr
        environ['wsgi.version']      = (1,0)
        environ['wsgi.multithread']  = False
        environ['wsgi.multiprocess'] = True
        environ['wsgi.run_once']     = True

        if environ.get('HTTPS','off') in ('on','1'):
            environ['wsgi.url_scheme'] = 'https'
        else:
            environ['wsgi.url_scheme'] = 'http'

        headers_set  = []
        headers_sent = []

        def write(data):
            if not headers_set:
                raise AssertionError("write() before start_response()")

            elif not headers_sent:
                # Before the first output, send the stored headers
                status, response_headers = headers_sent[:] = headers_set
                sys.stdout.write('Status: %s\\r\\n' % status)
                for header in response_headers:
                    sys.stdout.write('%s: %s\\r\\n' % header)
                sys.stdout.write('\\r\\n')

            sys.stdout.write(data)
            sys.stdout.flush()

        def start_response(status,response_headers,exc_info=None):
            if exc_info:
                try:
                    if headers_sent:
                        # Re-raise original exception if headers sent
                        raise exc_info[0], exc_info[1], exc_info[2]
                finally:
                    exc_info = None     # avoid dangling circular ref
            elif headers_set:
                raise AssertionError("Headers already set!")

            headers_set[:] = [status,response_headers]
            return write

        result = application(environ, start_response)
        try:
            for data in result:
                if data:    # don't send headers until body appears
                    write(data)
            if not headers_sent:
                write('')   # send headers now if body was empty
        finally:
            if hasattr(result,'close'):
            result.close()


    # Change this to the directory above your site code.
    sys.path.append("/py")

    # Change mysite to the name of your site package
    os.environ['DJANGO_SETTINGS_MODULE'] = 'pytest.settings'

    run_with_cgi(django.core.handlers.wsgi.WSGIHandler())

i odpalamy to by www :D na razie tyle …

do pobrania

Dokładam paczkę z plikami do testu:

    $ unzip py.zip

ftp na home.pl; open http://server.home.pl/py/dispatch.py/admin

dodatkowe moje narzędzia