Apprendre à utiliser le Framework webware pour Python


Télécharger Apprendre à utiliser le Framework webware pour Python

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Apprendre à utiliser le Framework webware pour Python

...

Qu'est-ce qu'un Webware?

  Orienté python

  Orienté objet

  Couvrir les besoins communs des développeurs Web

  Architecture modulaire: les composants peuvent facilement être utilisés ensemble ou indépendamment

  Excellente documentation et exemples

  Développement Open Source et communauté

  Licence de style python

  Multiplate-forme; fonctionne aussi bien sur:

  Unix dans ses multiples saveurs

  Windows NT / 2000 / XP

Qu'est-ce qu'il y a dans le Webware?

  Le coeur du Webware est WebKit

  Nous couvrirons également:

  Pages du serveur Python (PSP)

  TaskKit

  MiddleKit

  UserKit

WebKit

  Un serveur d'applications rapide et facile à utiliser

  Multi-threading, pas de fourche

  Facilite les données persistantes

  Fonctionne bien sur Windows

  Stable et mature

  Utilisé dans plusieurs projets commerciaux réels

  Prend en charge plusieurs styles de développement:

  Servlets

  Pages du serveur Python

...

Installation de Webware

  Télécharger

  La dernière version officielle peut être téléchargée à partir de

http://webware.sourceforge.net/

  Ou utilisez CVS pour attirer de nouvelles sources

  Installer

  Décompressez l'archive, créant un répertoire Webware

  Exécutez python install.py dans le répertoire Webware

Directeur de travail

  Vous pouvez exécuter WebKit directement à partir du répertoire d'installation.

  Mais il est facile de créer un répertoire de travail séparé.

  Avantages:

  Conserve la configuration, les journaux, les caches, les servlets, etc. séparément du répertoire Webware

  Vous permet d'exécuter plusieurs instances de WebKit sans avoir à créer plusieurs copies de Webware.

  Facilite la mise à jour du Webware, car vous n’avez pas à le modifier.

Répertoire de travail continué

  Comment faire:

  python bin / MakeAppWorkDir.py / path / to / workdir

  Cela crée cette structure de répertoire: rép_travail / cache / utilisé par Webware

Canettes / ???

Configs / Application.config les éditer pour modifier votre configuration

AppServer.config

ErrorMsgs / Webware enregistre les messages d'erreur ici

Journaux / Webware stocke les journaux ici

Le contexte MyContext / Sample est placé ici; vous pouvez le modifier pour créer votre application

Les sessions / données de session sont stockées ici

AppServer démarre AppServer sous Unix

AppServer.bat Démarre le serveur AppServer sous Windows.

Launch.py Utilisé par AppServer [.bat]

NTService.py Version du service Windows NT / 2000 d’AppServer

WebKit.cgi Installer dans votre répertoire cgi-bin

OneShot.cgi Installez-le dans votre répertoire cgi-bin pour utiliser le mode One-Shot

WebKit.cgi

  Facile à installer

  Devrait fonctionner avec n'importe quel serveur Web prenant en charge CGI

  À installer:

  Copiez WebKit.cgi de votre répertoire de travail (et non du répertoire d’installation de Webware) dans le répertoire cgi-bin de votre serveur Web.

  Sous Windows, vous devrez probablement changer la première ligne

de WebKit.cgi à partir de

#! / usr / bin / env python

à

#! C: \ Python22 \ python.exe (ou où que soit installé Python…)

mod_webkit

  Module Apache personnalisé pour Webware écrit en C

  Beaucoup plus rapide que WebKit.cgi:

  Ne doit pas démarrer l'interpréteur Python à chaque requête

  Situé dans Webware / WebKit / Native / mod_webkit

  Sous Unix:

  utiliser make et make install

  Sous Windows:

  Téléchargez le fichier mod_webkit.dll précompilé à partir de http://webware.sourceforge.net/MiscDownloads/

  Placez mod_webkit.dll dans le répertoire Apache / modules mod_webkit suite

  Editez votre fichier httpd.conf Apache:

# Charge le module mod_webkit

# Sous Windows, vous utiliseriez mod_webkit.dll au lieu de mod_webkit.so

LoadModule webkit_module modules / mod_webkit.so

AddModule mod_webkit.c

# Incluez ceci si vous voulez envoyer tous les fichiers .psp à WebKit,

# même ceux qui ne se trouvent pas dans un contexte WebKit configuré.

AddType text / psp .psp

AddHandler psp-handler .psp

# Ceci envoie des demandes pour / webkit / ... au serveur d'applications sur le port 8086.

<Emplacement / webkit>

WKServer localhost 8086

SetHandler gestionnaire de webkit

</ Location>

Démarrer le serveur d'applications

  Dans votre répertoire de travail, exécutez:

  Unix: ./AppServer

  Windows: AppServer.bat

Utilisation des exemples de servlets et des PSP

  Pour utiliser l'adaptateur CGI, surfez sur:

  http: //localhost/cgi-bin/WebKit.cgi

  Pour utiliser l'adaptateur mod_webkit, surfez sur:

  http: // localhost / webkit

  Expérimentez et amusez-vous!

Servlets

  Une classe Python située dans un module du même nom

  Doit hériter de WebKit.Servlet ou de l'une de ses sous-classes:

  WebKit.HTTPServlet

  WebKit.Page

  Une technique courante consiste à créer votre propre sous-classe de WebKit.Page appelée SitePage qui contiendra:

  Méthodes utilitaires

  Remplacements du comportement par défaut dans WebKit.Page

  La servlet la plus simple:

depuis la page d'importation WebKit.Page



classe HelloWorld (Page):

def writeContent (self):

self.writeln ('Hello, World!')

Les contextes

  Les servlets sont situés dans les contextes

  Un contexte est un paquet Python

  Comme un paquet Python, il contient un module __init__.py qui:

  Est importé avant l'exécution de servlets

  Est-ce un bon endroit pour mettre le code d'initialisation global

  S'il contient une fonction contextInitialize, alors contextInitialize (application, path_of_context) est appelé.

Application.config contient les paramètres qui mappent

URL vers les contextes

  Il est préférable de placer les modules d’assistance non-servlet dans un package séparé, au lieu de les placer dans le package contextuel.

Le cycle demande-réponse

  L'utilisateur lance une demande:

  http: // localhost / webkit / MyContext / MyServlet

  Cela active le contexte MyContext et le servlet MyServlet en fonction des paramètres définis dans Application.config.

  Remarque: aucune extension n'a été spécifiée, même si le fichier s'appelle MyServlet.py.

  Application.config contient plusieurs paramètres qui contrôlent le traitement des extensions.

  Une instance de la classe MyServlet est extraite d'un pool d'instances MyServlet. OU si le pool est vide, une nouvelle instance MyServlet est créée.

  Un objet de transaction est créé.

  Ces méthodes sont appelées sur l'instance MyServlet:

  Servlet.awake (transaction)

  Servlet.respond (transaction)

  Servlet.sleep (transaction)

  L'instance MyServlet est renvoyée dans son pool d'instances.

L'objet de transaction

  Regroupe plusieurs objets impliqués dans le traitement d'une requête:

  Requête: contient les données reçues de l'utilisateur

  Réponse: contient les en-têtes et le texte de la réponse

  Servlet: traite la demande et renvoie le résultat dans la

Réponse

  Session: contient des données côté serveur indexées par un cookie

  Peut également utiliser une variable intégrée à l'URL

  Application: l'objet contrôleur global

  Vous utilisez rarement l'objet de transaction directement

HTTPRequest

  Dérivé de la classe de base de demande générique

  Contient les données envoyées par le navigateur:

  Variables GET et POST:

  .field (nom, [valeur par défaut])

  .hasField (nom)

  .des champs()

  Biscuits:

  .cookie (nom, [défaut])

  .hasCookie (nom)

  .biscuits()

  Si vous ne voulez pas savoir s’il s’agit d’un champ ou d’un cookie:

  .value (nom, [valeur par défaut])

  .hasValue (nom)

  .valeurs()

  Variables d'environnement CGI

  Différentes formes de l'URL

  Chemins côté serveur

  etc.

HTTPResponse

  Dérivé de la classe de base de réponse générique

  Contient les données renvoyées au navigateur

  .write (text) - envoie une réponse textuelle au navigateur

  Normalement, tout le texte est accumulé dans une mémoire tampon, puis envoyé en une fois à la fin du traitement de la servlet.

  .setHeader (name, value) - définit un en-tête HTTP

  .flush () - efface tous les en-têtes et le texte accumulé; utilisé pour:

  Streaming gros fichiers

  Affichage des résultats partiels pour les servlets lents

  .sendRedirect (url) - définit les en-têtes HTTP pour une redirection

Page: Méthodes de commodité

  Accès à la transaction et à ses objets:

  .transaction (), .reponse (), .request (), .session (), .application ()

  Écrire des données de réponse:

  .write () - équivalent à .response (). write ()

  .writeln () - ajoute une nouvelle ligne à la fin

  Méthodes d'utilité:

.htmlEncode ()

  .urlEncode ()

  Passer le contrôle à un autre servlet:

  .vers l'avant()

  .includeURL ()

  .callMethodOfServlet ()

  Quoi que vous choisissiez d'ajouter à votre page de site

Page: Méthodes appelées lors d'une demande

  .respond () appelle généralement .writeHTML ()

  Remplacez .writeHTML () dans votre servlet si vous voulez que votre servlet fournisse la sortie complète

  Mais par défaut, .writeHTML () appelle une séquence commode d’appels de méthodes:

  .writeDocType () - substitue ceci si vous ne voulez pas utiliser

HTML 4.01 Transitional

  .writeln ('<html>')

  .writeHead ()

  .writeBody ()

  .writeln ('</ html>')

Page: .writeHead ()

  Appels .writeHead ():

  .write ('<head>')

  .writeHeadParts () qui appelle elle-même:

  .writeTitle ()

  Fournissez un .title () dans votre servlet qui renvoie le titre souhaité.

  Sinon, le titre sera le nom de votre classe de servlet

  .writeStyleSheet () - substitue si vous utilisez des feuilles de style

  .write ('</ head>')

Page: .writeBody ()

  Appels .writeBody ():

  .write ('<body% s>'% self.htBodyArgs ())

  écrasez .htBodyArgs () si vous devez fournir des arguments à la balise <body>

  .writeBodyParts () qui appelle elle-même:

  .writeContent ()

  généralement c'est ce que vous allez remplacer dans vos servlets ou votre SitePage

  .write ('</ body>')

actes

  Les actions permettent d’associer différents boutons de soumission de formulaire à différentes méthodes de servlet.

  Pour utiliser des actions:

  Ajoutez des boutons de soumission comme celui-ci à un formulaire:

<nom d'entrée = _action_add type = submit value = ”Add

Widget ”>

  Fournissez une méthode .actions () qui renvoie la liste des noms de méthodes:



actions def (auto):

retourne ['ajouter', 'supprimer']

  .respond () recherche un champ _action_ACTIONNAME où ACTIONNAME est dans la liste renvoyée par .actions ()

  Si un tel champ est trouvé, alors .handleAction () est appelé à la place de .writeHTML ()

Actions continuées

  Appels .handleAction ():

  .preAction (ACTIONNAME) qui appelle elle-même:

  .writeDocType ()

  .writeln ('<html>')

  .writeHead ()

  .ACTIONNAME ()

  .postAction (ACTIONNAME) qui lui-même appelle:

  .writeln ('</ html>')

  En d'autres termes, votre méthode d'action est appelée à la place de .writeContent ()

  Bien sûr, vous n’avez pas à utiliser d’actions; vous pouvez simplement écrire du code dans votre writeContent qui examine l'objet HTTPResponse et agit en conséquence.

Expéditeur

  auto.forward ('AnotherServlet')

  Analogue à une redirection effectuée entièrement dans WebKit

  Regrouper la demande actuelle dans une nouvelle transaction

  Transmet cette transaction au cycle normal RequestResponse avec le servlet indiqué

Lorsque ce servlet est terminé, le contrôle retourne au servlet appelant, mais tout le texte de réponse et les en-têtes du servlet appelant sont ignorés.

  Utile pour l'implémentation d'un servlet «contrôleur» qui examine la demande et la transmet à un autre servlet pour traitement.

  Jusqu'à récemment, vous deviez écrire:

self.application (). forward (self.transaction (), 'AnotherServlet')

Comprenant

  self.includeURL (‘AnotherServlet’)

  Similaire à .forward (), sauf que la sortie du servlet appelé est incluse dans la réponse, au lieu de la remplacer.

  Jusqu'à récemment, vous deviez écrire:

self.application (). includeURL (self.transaction (), ‘AnotherServlet’)

Appeler des méthodes de servlet

  self.callMethodOfServlet ('AnotherServlet', 'méthode', arg1, arg2,…)

  Instancie le servlet indiqué

  Appelle servlet.awake ()

  Appelle la méthode indiquée avec les arguments indiqués

  Appelle servlet.sleep ()

  Renvoie la valeur de retour de l'appel de méthode au servlet appelant.

  Exemple: supposons que vous ayez une servlet de table des matières qui doit extraire le titre d'autres servlets en appelant la méthode .title () sur ces servlets:

  title = self.callMethodOfServlet (nom du servlet, 'titre')

Sessions

  Stocker les données spécifiques à l'utilisateur qui doivent persister d'une requête à l'autre

  Les sessions expirent après un certain nombre de minutes d'inactivité

  Contrôlé à l'aide de la variable de configuration SessionTimeout

  L'interface habituelle:

  .value (nom, [valeur par défaut])

  .hasValue (nom)

  .valeurs()

  .setValue (nom, valeur)

Magasins de session

  Trois options pour la variable de configuration SessionStore:

  Mémoire - toutes les sessions sont gardées en mémoire

  Dynamique - les sessions récemment utilisées sont conservées en mémoire, mais les sessions qui n’ont pas été utilisées depuis un moment sont transférées sur le disque et supprimées de la mémoire.

  C'est la valeur par défaut, et c'est recommandé.

  Fichier - les sessions sont décochées sur le disque et décodées du disque à chaque demande et ne sont pas du tout stockées en mémoire.

  Non recommandé.

  Toutes les sessions sont décochées sur le disque lorsque le serveur d'applications est arrêté et désélectionnées au démarrage du serveur d'applications.

  Vous pouvez redémarrer le serveur d'applications sans perdre de sessions.

Options de session

  Les sessions sont associées à un identifiant de session aléatoire

  Par défaut, l'ID de session est stocké dans un cookie.

  Alternative: définissez UseAutomaticPathSessions sur 1

  L'identifiant de session est automatiquement intégré en tant que composant de l'URL

  Cookies non requis

  Mais: les URL deviennent beaucoup plus longues et plus laides

  Pas moyen (encore) que WebKit choisisse la stratégie appropriée en fonction de la prise en charge par le navigateur des cookies PSP: Python Server Pages

  Mélangez Python et HTML dans le style de JSP ou ASP

  Inclure le code en utilisant <%…%>

  Inclure les expressions évaluées à l'aide de <% =…%>

  Commencez un bloc en terminant le code avec deux points:

<% pour I dans la plage (10):%>

  Terminez un bloc en utilisant la balise spéciale: <% end%>

  Lorsque l'utilisateur demande une PSP:

  Il est automatiquement compilé dans une classe de servlet dérivée de WebKit.Page

  Le corps de votre PSP est traduit en une méthode writeHTML ()

Exemple PSP

<%

def isprime (nombre):

si numéro == 2:

retour 1

si nombre <= 1:

retourne 0

pour i dans la plage (2, nombre / 2):

pour j dans la plage (2, i + 1):

si i * j == nombre:

retourne 0

retour 1

%>

<p> Voici quelques chiffres, qu'ils soient premiers ou non:

<p>

<% pour i dans la plage (1, 101):%>

<% si isprime (i):%>

<font color = red> <% = i%> est premier! </ font>

<% end%> <% else:%>

<% = i%> n'est pas premier.

<% end%>

<br>

<% end%>



1