3

これを行うためのより良い方法があるかどうかはわかりませんが、サイトにサインアップページがあり、ユーザーがサインアップした後、初期データ (__init__データモデルの内容) を追加し、同じセクションに他の情報を追加し始めます。私にbroken pipeエラーを与えています。奇妙なことに、私が期待しているエントリがデータベースにあるため、コードは機能しているようです。コマンドが役立つかどうかを確認するためにコマンドを移動しようとしました.flush()が、そうではないようです。

Traceback (most recent call last):
  File "/Users/me/Dropbox/code/eclipseWorkSpace/website/pyramidwiki/lib/python2.7/site-packages/waitress-0.8.1-py2.7.egg/waitress/channel.py", line 134, in handle_write
    flush()
  File "/Users/me/Dropbox/code/eclipseWorkSpace/website/pyramidwiki/lib/python2.7/site-packages/waitress-0.8.1-py2.7.egg/waitress/channel.py", line 249, in _flush_some
    num_sent = self.send(chunk)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/asyncore.py", line 365, in send
    result = self.socket.send(data)
error: [Errno 32] Broken pipe

これが私のコードです:

if 'form.submitted' in request.params:
    firstname = request.params['firstname']
    lastname = request.params['lastname']
    email = request.params['email']
    password = request.params['password']
    try:
        new_user = Users(email, firstname, lastname, password)
        DBSession.add(new_user)
        #DBSession.flush() #commit so we get error if any
        #add some other info
        user_data = DBSession.query(Users).filter(Users.email==email).first()
        user_data.join_date = datetime.datetime.now()
        #create random number for verification url
        user_data.vertified = id_generator(50)

        DBSession.flush() #doesn't seem to make a difference where the flush is
        return HTTPFound(location = request.route_url('new'))

何か案は?

4

2 に答える 2

2

これはあなたの質問に直接答えないかもしれませんが、「あなたはそれをすべて間違っています」(tm):)

セッションに追加した後でUserオブジェクトを再クエリする必要はありません。さらに、最初にsession.flush()を実行せずにデータベースからクエリを実行しようとすると、データベースにレコードがまだないため、エラーが発生します。 。私はこのようなことをします:

if 'form.submitted' in request.params:
    firstname = request.params['firstname']
    lastname = request.params['lastname']
    email = request.params['email']
    password = request.params['password']
    try:
        new_user = Users(email, firstname, lastname, password)
        new_user.join_date = datetime.datetime.now()
        new_user.verified = id_generator(50)

        DBSession.add(new_user)
        DBSession.flush() # should fail if user email is in the database
        return HTTPFound(location = request.route_url('new'))

また、実行のすべてのブランチ(つまり、request.paramsの "if'form.submitted'のexcept:句、else:句)が意味のあるものを返すことを確認する必要があります。ビュー関数が返すため、例外が発生する可能性があります。一部の条件ではなし。実際には、おそらくそれが起こっていたのです。「user_data = DBSession.query(Users)」行で例外が発生し、except:部分では何も返されませんでした。

于 2012-07-09T21:40:54.293 に答える