Типы в Python - Google Appengine - PullRequest
       12

Типы в Python - Google Appengine

2 голосов
/ 08 апреля 2010

Немного раздражен;

У меня есть модель и класс, который просто хранит запрос на получение в базе данных; базовое отслеживание.

class SearchRec(db.Model):
  WebSite = db.StringProperty()#required=True
  WebPage = db.StringProperty()
  CountryNM = db.StringProperty()
  PrefMailing = db.BooleanProperty()
  DateStamp = db.DateTimeProperty(auto_now_add=True)
  IP = db.StringProperty()

class AddSearch(webapp.RequestHandler):
  def get(self):
    searchRec = SearchRec()

    searchRec.WebSite = self.request.get('WEBSITE')
    searchRec.WebPage = self.request.get('WEBPAGE')
    searchRec.CountryNM = self.request.get('COUNTRY')
    searchRec.PrefMailing = bool(self.request.get('MAIL'))
    searchRec.IP = self.request.get('IP')

У Булочки есть мое печенье; Я думал, что установка bool (self.reque ....) установит тип строки, но независимо от того, что я передаю, она все равно сохраняет ее как TRUE в базе данных. У меня была та же проблема с использованием required = True для строк для модели; эта чертова вещь повторяла, что ничего не проходило ... но это было.

Та

Ответы [ 2 ]

3 голосов
/ 08 апреля 2010

Вы добавили много уровней сложности, чтобы понять, что делает встроенная функция bool (). Почему бы вам не проверить его непосредственно в командной строке, прежде чем встраивать его глубоко в код своего движка приложения Google.

Что вы обнаружите, так это то, что функция bool () использует значения истинности python:

http://docs.python.org/library/stdtypes.html#truth-value-testing

Следующие значения считаются ложь:

* None
* False
* zero of any numeric type, for example, 0, 0L, 0.0, 0j.
* any empty sequence, for example, '', (), [].
* any empty mapping, for example, {}.
* instances of user-defined classes, if the class defines a
   `__nonzero__()` or `__len__()` method, when that method returns the integer
   zero or bool value False. [1]

Все остальные значения считаются истинными - поэтому объекты многих типов всегда правда.

В частности - любая непустая строка является True.

1 голос
/ 08 апреля 2010

У Булочка есть мое печенье; Я думал, что установка bool (self.reque ....) установит тип строки, но независимо от того, что я передаю, она все равно сохраняет ее в базе данных как TRUE.

Ну, а какое значение self.request.get('MAIL')? Если это что-то отличное от пустой строки или None, bool увидит это как True.

У меня была та же проблема с использованием required = True для строк для модели; проклятая вещь говорила, что ничего не проходило ... но это было.

Если вы установите свойство на required=True, тогда вы должны передать его конструктору модели. Таким образом, если WebSite является обязательным свойством, вам нужно создать свой searchRec следующим образом:

searchRec = SearchRec(WebSite=self.request.get('WEBSITE'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...