Python django sqlalchemy和formencode

|| 我使用sqlalchemy在数据库中创建了一个表,现在想使用django根据数据库创建表单,并使用formencode对其进行验证。 (提到我使用Django Web Framework) python代码如下
from sqlalchemy import *
from sqlalchemy.orm import *

engine = create_engine(\'mysql+mysqldb://root:@localhost/testdb\', echo = True)

metadata = MetaData(engine)

session = create_session()

one_table = Table(\'one\', metadata,
              Column(\'id\',Integer, primary_key = True),
              Column(\'name\',String(40))
              )
many_table = Table(\'many_i\', metadata,
               Column(\'id\', Integer, primary_key = True),
               Column(\'name\', String(40)),
               Column(\'one_id\',Integer, ForeignKey(\'one.id\'))
               )

metadata.create_all(engine)

class One(object):
def __init__(self, name):
    self.name = name
def __repr__(self):
    return self.name
#pass

class Man_i(object):
def __init__(self, name):
   self.name = name

def __repr__(self):
    return self.name
#pass

mapper(One, one_table,
   properties={\'o2m\':relationship(Man_i)
               }
   )

mapper(Man_i, many_table)
    
已邀请:
最后,我提出自己的解决方案,能有人比我更喜欢我吗 **并且如果有人希望可以使用它,它将数据真正保存到数据库中(不要在settings.py-> middleware_classes->>#\'django.middleware.csrf.CsrfViewMiddleware \'中注释此行,以使用post方法) **
from django.shortcuts import render_to_response

from sqlalchemy import *
from sqlalchemy.orm import *

import formencode
from formencode import validators, htmlfill

engine = create_engine(\"mysql+mysqldb://root:@localhost/testdb\",echo = True)
#create database link

metadata = MetaData(engine)
session = create_session()

#database table 
person_table = Table(\'person\', metadata,
                     Column(\'id\', Integer, primary_key = True),
                     Column(\'name\', String(40)),
                     Column(\'age\', Integer),
                     Column(\'about\', String(100))
                     )

metadata.create_all(engine)#create database if not exist

class Person(object):#create a class for mapping
    def __init__(self,name,age,about):
        self.name = name
        self.age = age
        self.about = about
    def __repr__(self):
        return self.name, self.age, self.about

mapper(Person, person_table) #define map

class PersonValid(formencode.Schema):#for validation
    name = validators.String(not_empty=True, min = 3, max = 40)
    age = validators.Int(not_empty = True, min=1, max=120)
    about = validators.String(not_empty=True, min = 5, max = 100)


def insert_d(request): #insert def

 #for template page
    out = \"\"\"

    <table>
      <tr>
      <td>Name:</td>
      <td><input type=\"text\" name = \"name\"/>
      <form:error name = \"name\"/>
      <!--form:iferror name=\"name\">Horrible horror message</form:iferror-->
      <td>
      </tr>
      <tr>
      <td>Age:</td>
      <td><input type=\"text\" name=\"age\"/>
      <form:error name=\"age\" />
      <!--form:iferror name=\"age\">Horrible horror message</form:iferror-->
      </td>
      </tr>
      <tr>
      <td>About</td>
      <td><textarea name=\"about\"></textarea>
      <form:error name=\"about\" />
      <!--form:iferror name=\"about\">Horrible horror message</form:iferror-->
      <td>
      </tr>
      <table>
      <input type = \"submit\" value = \"Submit\">

    \"\"\"

    if request.method == \'POST\':
        inp = {\'name\': request.POST[\'name\'],
               \'age\': request.POST[\'age\'],
               \'about\': request.POST[\'about\']
               }
        try:
            PersonValid.to_python(inp)

            a_person = Person([\'name\'],
                              inp[\'age\'],
                              inp[\'about\']
                              )

            session.add(a_person)
            session.flush()
            return render_to_response(\'formencode/htmlfill.html\',
                                      {\'out\': htmlfill.render(out,{} ),
                                       \'text\':\"Saved OK\"}
                                      )


        except validators.Invalid, e:

            val = htmlfill.render(out, e.error_dict or {})

    else:
        return render_to_response(\'formencode/htmlfill.html\',
                                  {\'out\':out,\'text\':\"POST NOT START\"}
                                  )


    #html form

    #the htmlfill.html locate in \"templete/formencode/\" 
     directory contain the page below

<form name=\"out\" method=\"POST\" action=\"/fcode_alch/\">

{%autoescape off%}    
{{text}}
{{out}}    
{%endautoescape%}
    

要回复问题请先登录注册