Seite 1 von 1

Python+Django (Windows) Erste Schritte

Verfasst: Dienstag 14. August 2012, 18:51
von EternalPain
Ich habe nach Anleitungen Python und Django instaliert:
http://openbook.galileocomputing.de/pyt ... 25_001.htm
http://www.sevenmicro.de/2011/12/wie-ma ... stalliert/

Ich habe mir nun "python-2.7.2.msi" gedownloaded und installiert
Habe die setuptools für py2.7 ebenfalls geladen und installiert (easy_install wollte irgendwie nicht bei mir)
Daher habe ich Django-1.4.1 geladen und mit 'python setup.py install' installiert
Die Windows Umgebungsvariable habe ich "D:\Python27" hinzugefügt
habe mir mySQL-python-1.2.3 auch geladen (bekomme bei der installation aber leider ein fehler)
Running setup.py egg_info for package mysql-python
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "D:\Python27\Scripts\build\mysql-python\setup.py", line 15, in <module>
metadata, options = get_config()
File "setup_windows.py", line 7, in get_config
serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_key'])
WindowsError: [Error 2] Das System kann die angegebene Datei nicht finden
Complete output from command python setup.py egg_info:
Traceback (most recent call last):

File "<string>", line 14, in <module>

File "D:\Python27\Scripts\build\mysql-python\setup.py", line 15, in <module>

metadata, options = get_config()

File "setup_windows.py", line 7, in get_config

serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_key'])

WindowsError: [Error 2] Das System kann die angegebene Datei nicht finden

soweit sogut, python ist installiert und funktioniert soweit (vermutlich?!)

Ich habe dann nach Anleitung von Galileo versucht eine erste Testapp zu erstellen
http://openbook.galileocomputing.de/pyt ... 25_004.htm

wenn ich aber wie in der Anleitung beschrieben meine app hinzufügen möchte
Code:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'test1.meintest'
)


dann meldet er immer 'Error: No module named meintest'

komme also leider nicht darüber hinaus irgendwas zu testen...

ausserdem ist es für einen 'anfänger' in diesem Bereich echt schwierig irgendwas zu erstellen
es muss unglaublich viel irgendwo 'konfiguriert' werden

Gibt es hier evtl nocht weitere Tutorials die einen 'schritt für schritt' an Python und Django
heranbringen bzw. kann mir hier evtl. jemand helfen meine ersten schritte zu bestreiten?!

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 06:39
von noisefloor
Hallo,

Code: Alles auswählen

Gibt es hier evtl nocht weitere Tutorials die einen 'schritt für schritt' an Python und Django
heranbringen bzw. kann mir hier evtl. jemand helfen meine ersten schritte zu bestreiten?!
Der 1. Anlaufstelle ist wohl die offizielle Doku: https://docs.djangoproject.com/en/1.4/

Da gibt's alles von ausführlichen Installationsanleitungen bis hin zu mehrstufigen Tutorials.

Wenn du Probleme mit MySQL unter Win hast, dann kannst due für den Anfang zum Spielen sicherlich auch SQLite als DB Backend. Hat den Vorteil, dass es bei Python dabei ist und ootb läuft :-)

BTW: Das erwähnte Buch hat einen extrem schlechten Ruf - dazu gibt es diverse Threads hier im Forum. Wohl ein weiterer Grund, auf die offizielle Doku zu wechseln. ;-)

Gruß, noisefloor

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 12:25
von EternalPain
noisefloor hat geschrieben: Wenn du Probleme mit MySQL unter Win hast, dann kannst due für den Anfang zum Spielen sicherlich auch SQLite als DB Backend. Hat den Vorteil, dass es bei Python dabei ist und ootb läuft :-)
Eigentlich hatte ich nur Probleme python mysql zu installieren, mit PHP funktionier mySQL problemlos
noisefloor hat geschrieben: BTW: Das erwähnte Buch hat einen extrem schlechten Ruf
Ich fands gut das ich in diesem zusammenhang überhaupt eine halbwegs brauchbare deutsche Docu gefunden habe, englisch ist für mich immer recht anstrengend

Muss sagen das diese Frameworks allesamt irgendwie recht kompliziert sind, habe mir inzwischen noch web2py angesehen... zwar immernoch recht kompliziert aber dafür hat es eine 'interessante' 'oberfläche' womit ich immerhin schon ein bisschen weiter kam als mit Django

Aber alles in allem ist das alles bisschen komplex für einen Anfänger

Hab mich also weiter nach möglichkeiten umgesehen und festgestellt das man per (fast)cgi eigentlich nahezu jede Sprache verwenden kann... C/C++,Basic und auch Python lässt sich so direkt 'interpretieren' was ich deutlich 'praktischer' finde...

hab dann mal ein einfaches Beispiel gefunden das ganz gut funktioniert allerdings ist mir hier eines unklar:

Code: Alles auswählen

#!D:/Python27/python.exe -u
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import cgi
import cgitb; cgitb.enable()  # for troubleshooting

print "Content-type: text/html"
print

print """
<html>

<head><title>Sample CGI Script</title></head>

<body>

  <h3> Sample CGI Script </h3>
"""

form = cgi.FieldStorage()
message = form.getvalue("message", "(no message)")

print """

  <p>Previous message: %s</p>

  <p>form

  <form method="post" action="pycgi.py">
    <p>message: <input type="text" name="message"/></p>
  </form>

</body>

</html>
""" % cgi.escape(message)
Woher nimmt %s seinen Wert?

alles in allem ohne einen neuen Thread zu öffnen, welche möglichkeiten bieten sich mir, wenn ich WebApps (mit oder ohne Python) erstellen will die sowohl schnell als auch sicher sind...
Eine 'visuelle ausgabe' im browser benötige ich eigentlich nicht...

denn eigentlich möchte ich eine ClientApp schreiben, dafür benötige ich ein 'Server' Programm das eingaben mit der datenbank verarbeitet und daten zurückgibt... das ganze soll irgendwann mal ein kleines online RPG werden...

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 12:42
von Damaskus
Zu MySQL-python für Windows habe ich dir einen Tip:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
Dort findest du die bekanntesten Python Module als Installer für Windows.

Die Fehlermeldung die du bei der Installation erhalten hast, deute darauf hin, dass du kein MySQL auf Windows installiert hast.
Welche Umgebung verwendest du denn als HTTP/MySQL Server, XAMPP?

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 13:26
von BlackJack
@EternalPain: CGI und FastCGI sind zwei verschiedene Sachen. CGI möchte man nicht wirklich, das ist heutzutage die schlechteste der Möglichkeiten eine Webanwendung an den Start zu bringen. Und wenn man sich dann die notwendigen Bibliotheken heran holt um Formeingaben zu verarbeiten, HTML zu erzeugen, und mit der Datenbank zu sprechen, dann programmiert man sich im Grunde sein eigenes Django. Es macht also mehr Sinn etwas schon vorhandenes zu verwenden als das als Anfänger schlecht selbst nach zu implementieren. CGI wird da sehr schnell unpraktisch.

Wenn Du ein kleines Rahmenwerk haben möchtest, dann schau Dir mal Bottle oder Flask an. Da musst Du dann aber auch eine Menge noch selbst machen oder über Drittbibliotheken dazu holen.

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 15:48
von EternalPain
Damaskus hat geschrieben:Die Fehlermeldung die du bei der Installation erhalten hast, deute darauf hin, dass du kein MySQL auf Windows installiert hast.
Welche Umgebung verwendest du denn als HTTP/MySQL Server, XAMPP?
Versteh ich eigentlich nicht richtig, da ich per PHP bereits mit MySQL gearbeitet habe?!
Ja benutze XAMPP1.8.0, wenn ich xampp_stop mache bekomme ich wegen mysql auch eine meldung:
D:\xampp>xampp_stop
Stopping XAMPP...

Can't find Apache process #1608.
Can't find MySQL process #1968.
Beim starten bekomme ich auch Meldungen die ich nicht wirklich verstehe:
(OS 10048)Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder
Anschluss) nur jeweils einmal verwendet werden. : AH00072: make_sock: could no
t bind to address [::]:80
(OS 10048)Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder
Anschluss) nur jeweils einmal verwendet werden. : AH00072: make_sock: could no
t bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs
BlackJack hat geschrieben:@EternalPain: CGI und FastCGI sind zwei verschiedene Sachen...
Das musste mir Wikipedia erstmal erklären :D


Bei FastCGI wird das auszuführende Programm (inkl. Interpreter, falls nötig) nur einmal geladen und steht dann für mehrere Requests zur Verfügung – egal ob vom selben Client oder von unterschiedlichen Clients. Die Kommunikation mit dem Webserver erfolgt dabei nicht durch Umgebungsvariablen und Standardein-/ausgabe, sondern über Unix Domain Sockets oder TCP-Netzwerkverbindungen.

Programmiertechnisch lässt sich der Unterschied zu CGI-Programmen daran festmachen, dass ein FastCGI-Programm eine zentrale Schleife hat, die Requests entgegennimmt und durchaus solange laufen kann wie der Webserver:

Code: Alles auswählen

use FCGI;

while (FCGI::accept () >= 0) {
  ... http-Request bearbeiten ...
}
Das scheint genau das zu sein was ich will, so wie ich es verstanden habe kann ich das zB per winsock ansprechen??
Die Kommunikation mit dem Webserver erfolgt paketorientiert und verbindungslos. Ein Datenpaket enthält im Header die FastCGI-Protokollversion, den Nachrichtentyp, eine Request-ID und die Länge der folgenden Daten.
Wie habe ich mir da den Header vorzustellen?

Unabhängig vom Header;
per FastCGI müsste ich also mein Programm auf dem Server per winsock ansprechen können und so vermutlich auch bytecode übergeben können statt der eher umständlichen query methode bzw bytecode zurückgeben lassen?

Dabei dürfte die Sprache wie bei dem CGI Beispiel keine sonderliche rolle spielen ob ich nun Python, PHP oder C++ nehme?

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 16:53
von BlackJack
@EternalPain: Die Fehlermeldung beim Starten sagt eigentlich dass der Webserver gar nicht gestartet werden konnte, weil da schon ein anderer Prozess auf Port 80 auf Verbindungen wartet.

Genau wie CGI ist FastCGI eigentlich eine Stufe zu primitiv um damit bequem arbeiten zu können. *Die* Schnittstelle gegen die man mit Python heutzutage Webanwendungen programmiert ist WSGI. Das kann man dann wenn man möchte auch mit dem entsprechenden Adapter auch als FastCGI nach aussen zur Verfügung stellen.

Selbst WSGI ist den meisten Leuten noch eine Spur zu umständlich, darum gibt es Bibliotheken unterschiedlichen Umfangs, die einem die Arbeit abnehmen, die man sonst für jede Webanwendung auf's neue machen müsste — beziehungsweise um zu verhindern, dass sich jeder seine eigene kleine Bibliothek dafür schreiben muss. Da kommen dann die erwähnten Mikrorahmenwerke wie Bottle oder Flask ins Spiel.

Auf den FastCGI-Server greift der Webserver zu. Wenn *Du* das selber machen möchtest, dann müsstest Du ja die Client-Seite von FastCGI implementieren, also das was normalerweise Webserver machen. Also wird man da eher auf den Webserver zugreifen, der so konfiguriert ist, dass er als Proxy für den FastCGI-Server arbeitet. Der Vorteil bei FastCGI ist, dass der Prozess nicht auf dem gleichen Rechner laufen muss wie der Webserver. Wenn man das nicht braucht, dann wäre beim Apache eine Anbindung von Python mittels `mod_wsgi` direkter. Wenn man gegen WGSI programmiert kann man das aber alles auch später festlegen und auch ändern. Wie gesagt: Das ist die Standardschnittstelle gegen die man Webanwendungen in Python schreiben sollte.

Wie der Header bei FastCGI aussieht steht ganz sicher in dessen Spezifikation. Und Du musst das Protokoll einhalten, also auch die „umständliche Query”. Was meinst Du mit „bytecode”? Kann es sein, dass Du eigentlich gar keine Webanwendung schreiben willst, also nichts womit man per HTTP kommuniziert? Sondern eher „remote procedure calls” (RPC)? Dann solltest Du Dir mal JSON-RPC oder XML-RPC anschauen.

Re: Python+Django (Windows) Erste Schritte

Verfasst: Mittwoch 15. August 2012, 22:52
von EternalPain
BlackJack hat geschrieben: @EternalPain: Die Fehlermeldung beim Starten sagt eigentlich dass der Webserver gar nicht gestartet werden konnte, weil da schon ein anderer Prozess auf Port 80 auf Verbindungen wartet.
Das kann durchaus möglich sein, bei meinen Experimentellen versuchen mit Apache, Ruby und Django hab ich
glaub bei Apache das eine oder andere doppelt installiert
BlacJack hat geschrieben: Was meinst Du mit „bytecode”? Kann es sein, dass Du eigentlich gar keine Webanwendung schreiben willst, also nichts womit man per HTTP kommuniziert? Sondern eher „remote procedure calls” (RPC)? Dann solltest Du Dir mal JSON-RPC oder XML-RPC anschauen.
Richtig, der ganze http-kram interessiert mich daran eigentlich recht wenig (auch wenn ich mich immer wieder freue wenn mein browser auf anfragen 'reagiert' :D) Ich wollte ein kleines RPG-Spiel schreiben, statt wie bisher alles immer nur offline wollte ich nun aber gern mal ein 'online-spiel' daraus werden
lassen und beschäftige mich nun mit der nicht ganz unkomplizierten suche nach den möglichkeiten dazu

Zwar könnte ich verschiedene andere möglichkeiten wie zB. über FTP und datei senden-verarbeiten-laden-verarbeiten oder per PHP, aber diese methoden scheinen mir weder sicher, schnell noch besonders sinnvoll

Ich bin mir ziemlich sicher (bei der menge an client-basierten online-games) das ich nicht der erste bin der so etwas realisieren möchte bzw realisiert hat :D

JSON werd ich mir mal ansehen, auf den ersten blick klickt das ganz gut, wenn ich mich dann aber weiter umsehe fallen noch endlos weitere Stichworte...

Was hat es mit Python Stackless auf sich?

Re: Python+Django (Windows) Erste Schritte

Verfasst: Donnerstag 16. August 2012, 07:20
von noisefloor
Hallo,
Was hat es mit Python Stackless auf sich?
Meinst du was Stackless Python ist oder ob du es brauchst?

Erste Frage beantworten die ersten Absätze in http://wiki.python.org/moin/StacklessPython und http://www.stackless.com/ ziemlich gut. Letztere Frage musst du dann selber beantworten :-)

Gruß, noisefloor

Re: Python+Django (Windows) Erste Schritte

Verfasst: Dienstag 21. August 2012, 16:03
von Leonidas
Wozu überhaupt MySQL und Apache? Braucht man doch alles nicht. Django bringt nen Webserver mit und Python bringt SQLite mit, Problem gelöst.