Wie man GAE-Datenspeicher abfragt, um eine Vorlage zu machen (Newbie-Ebene)

Ich bin neu in der Programmierung und ich versuche, das Konzept des GAE-Datenspeichers zu erfassen. Ich versuche, eine App zu erstellen, um es einfach zu machen, Verträge zu schreiben ( http://contractpy.appspot.com ). Im Moment gebe ich alle Werte, die ich brauche, um die Vertragsvorlage von URL zu rendern, auf diese Weise:

self.redirect('/your_contract?person=%s&nacionality=%s&profession=%s&maritalStatus=%s&SSN=%s&driverLicense=%s&email=%s&witness=%s&owner=%s&contractType=%s&address=%s' % (person_name, user_nacionality, user_profession, user_maritalStatus, user_SSN, user_driverLicense, user_email, #witness, owner, contractType, address)) 

Aber so bleibt es auf eine Person beschränkt (und in der Zukunft muss ich mehrere Personen Daten im selben Vertrag machen).

Anstatt das zu tun, würde ich gern die GAE-Datenspeicher-Abfrage verwenden, um die Variablenwerte der Vorlage "your_contract.html" zu füllen.

Ich weiß, es ist eine einfache Frage, aber GAE-Datenspeicher ist mir völlig unklar (ich habe das "Zen des Datenspeichers" noch nicht begreift, aber ich verstehe ein bisschen SQL) und ich lerne gerade OOPROgramming. Ich habe diesen Artikel gelesen und ich habe versucht, diesem Beispiel zu folgen (Google guess_booK Probe), aber sie waren nicht genug für dieses Gehirn. Also, was ist der beste Weg, um diese Abfrage zu machen, um mehrere Personen Daten in einer Vorlage zu machen? (Klasse Person ist im Code unten)

Ich dachte so: Pass durch URL eine Liste mit einer Daten von jeder Person (zB: Führerscheinnummer):

 self.redirect('/your_contract?driverLicense=%s' % (driverLicenseList)) 

Und in der Handler "your_contract", verwenden Sie den Wert von "diverLicenseList" (nach Interaktion der Liste), um GAE Datenspeicher abzufragen, wie folgt:

 x = self.request.get('SSN') contractingParty = db.GqlQuery("SELECT FROM Person WHERE SSN IS x") 

Ist das der richtige Weg? Vielen Dank im Voraus für jede Hilfe!

Mein ursprünglicher Code (vor GAE-Abfrage) ist hier:

 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*- #!/usr/bin/env python # # Copyright 2007 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import os import webapp2 import jinja2 jinja_environment = jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates'))) import re from google.appengine.ext import db USER_RE = re.compile(r"^[a-zA-Z0-9_ -]{3,20}$") def valid_person(person): return USER_RE.match(person) PASS_RE = re.compile(r"^.{3,20}$") def valid_SSN(SSN): return PASS_RE.match(SSN) EMAIL_RE = re.compile(r"^[\S]+@[\S]+\.[\S]+$") def valid_email(email): return EMAIL_RE.match(email) import time import datetime def dateToday(): today = datetime.datetime.today() todayDay = str(today.day) todayMonth = str(today.month) monthExt = {'1':' January ', '2':'February', '3':' March ', '4':'April', '5':'May', '6':'June', '7':' July ', '8':'August', '9':'September', '10':'October', '11':'November ', '12':'December'} todayYear = str(today.year) return(todayDay + ' of ' + monthExt[todayMonth] + ' of ' + todayYear) class MainHandler(webapp2.RequestHandler): def get(self): template_values = {"person": "", "SSN": "", "driverLicense": "", "email":"", "person_error": "", "SSN_error": "", "driverLicense_error": "", "address": "", "email_error": ""} template = jinja_environment.get_template('index.html') self.response.out.write(template.render(template_values)) def post(self): person_name = self.request.get("person") user_nacionality = self.request.get('nacionality') user_profession = self.request.get('profession') user_maritalStatus = self.request.get('maritalStatus') user_SSN = self.request.get('SSN') user_email = self.request.get('email') user_driverLicense = self.request.get('driverLicense') person_error = "" SSN_error = "" driverLicense_error = "" geted_email_error = "" address = self.request.get('address') contractType = self.request.get("contractType") owner = self.request.get("owner") witness = self.request.get("witness") if (person_name and valid_person(person_name)) and (user_SSN and valid_SSN(user_SSN)) and ((not user_email) or (user_email and valid_email(user_email))): a = People(firstName = person_name, nacionality = user_nacionality, maritalStatus = user_maritalStatus, profession = user_profession, SSN = int(user_SSN), driverLicense = int(user_driverLicense) #address = user_address ) a.put() self.redirect('/your_contract?person=%s&nacionality=%s&profession=%s&maritalStatus=%s&SSN=%s&driverLicense=%s&email=%s&witness=%s&owner=%s&contractType=%s&address=%s' % (person_name, user_nacionality, user_profession, user_maritalStatus, user_SSN, user_driverLicense, user_email, witness, owner, contractType, address)) else: if not person_name or not valid_person(person_name): person_error = "Oh no!!! this person name isn't valid!" if not user_SSN or not valid_SSN(user_SSN): SSN_error = "Oh no!!! SSN isn't valid!" if user_email and not valid_email(user_email): geted_email_error = "Oh no!!! e-mail isn't valid!" template_values = {"person": person_name, "nacionality": user_nacionality, "maritalStatus": user_maritalStatus, "profession": user_profession, "SSN": user_SSN, "driverLicense": user_driverLicense, "email": user_email, "person_error": person_error, "SSN_error": SSN_error, "driverLicense_error": user_driverLicense, "address": address, "email_error": geted_email_error} template = jinja_environment.get_template('index.html') self.response.out.write(template.render(template_values)) class your_contractHandler(webapp2.RequestHandler): def get(self): geted_person_name = self.request.get('person') geted_user_nacionality = self.request.get("nacionality") geted_user_profession = self.request.get("profession") geted_user_maritalStatus = self.request.get("maritalStatus") geted_user_SSN = self.request.get('SSN') geted_user_email = self.request.get('email') geted_user_driverLicense = self.request.get('driverLicense') geted_person_error = "" geted_SSN_error = "" geted_driverLicense_error = "" geted_address = self.request.get('address') geted_owner = self.request.get("owner") geted_witness = self.request.get("witness") geted_contractType = self.request.get("contractType") geted_dateToday = dateToday() your_contract = jinja_environment.get_template('your_contract.html') your_contract_values = {"person":geted_person_name, "nacionality":geted_user_nacionality, "maritalStatus": geted_user_maritalStatus, "profession": geted_user_profession, "SSN":geted_user_SSN, "driverLicense":geted_user_driverLicense, "address":geted_address, "email":geted_user_email, "contractType":geted_contractType, "dateContract":geted_dateToday, } template = jinja_environment.get_template('index.html') self.response.out.write(your_contract.render(your_contract_values)) class People(db.Model): name = db.StringProperty(required = True) nacionality = db.StringProperty(required = True) maritalStatus = db.StringProperty(required = True) profession = db.StringProperty(required = True) SSN = db.IntegerProperty(required = True) driverLicense = db.IntegerProperty(required = True) # address = db.PostalAdressProperty(required = True) # condition = db.StringProperty(required = False, choices=set(["buyer", "seller", "renter", "owner", "witness"])) ##class Acts(db.Model): ## firstPart = db.StringProperty(required = True) ## secondPart = db.StringProperty(required = True) ## contractNumber = db.IntegerProperty(required = False) ## contractDate = db.DateProperty(auto_now_add=True) ## contractDraft = db.TextProperty(required = True) app = webapp2.WSGIApplication([('/', MainHandler), ('/your_contract', your_contractHandler)], debug=True) 

  • Datetime.datetime.now () gibt den alten Wert zurück
  • GAE-Implikationen von NDB-Hierarchie- und Entitätsgruppen
  • Benutzerdefinierte Eigenschaften wurden nicht korrekt für Expando-Modelle in wiederholten StructuredProperty gespeichert
  • Ist es möglich, einen Datenspeicher zwischen mehreren GAE-Anwendungen zu teilen
  • Mit weniger Datenspeicher kleine Operationen in Appengine
  • Google App Engine Versioning im Datenspeicher
  • NDB: Abfrageergebnisse sortieren
  • Db.ReferenceProperty () vs ndb.KeyProperty in der App Engine
  • One Solution collect form web for “Wie man GAE-Datenspeicher abfragt, um eine Vorlage zu machen (Newbie-Ebene)”

    Es gibt mehrere Probleme in Ihrem Code, beginnend mit dem Design.

    Sie sollten zwei Klassen haben, die im Datenspeicher gespeichert werden (Vertrag und Person) (Wenn Sie NDB verwenden, könnten Sie einen Vertrag mit einer strukturierten Eigenschaft für die Person haben, aber wir bleiben einfach.)

    Der Vertrag könnte alles haben, was Sie für einen Vertrag benötigen und dann ein Volk haben = ListProperty (db.Key)

    Nachdem du () eine Modellinstanz gelegt hast, wird die db.key () mit dem Schlüssel gefüllt. Das ist es, was du an andere Teile deines Codes weitergeben und in der ListProperty oben speichern kannst.

    Zum Beispiel in deiner Weiterleitung nach dem POST hättest du so etwas wie self.redirect ('/ your_contract? Person =% s'% a.key () ')

    Um die gespeicherte Person zu laden, würdest du tun: person = db.get (self.request.get ('person'))

    Wenn Sie mehrere Personentasten übergeben, müssen Sie die Webob-Dokumentation überprüfen, wie Sie mehrere Werte mit demselben Schlüssel in Querystring lesen können, aber ich weiß, dass es als Liste zurückkommt.

    Hoffe das hilft

    Python ist die beste Programmiersprache der Welt.