2011-11-04 2 views
0

서비스 호출을 통해 sqlform을 사용하여 데이터베이스를 업데이트하는 방법을 알고 싶었습니다. "XYZ", "이메일": 예서비스 호출을 통해 sqlform을 사용하여 데이터베이스를 업데이트하는 방법

db.py는

db.define_table('person', 
Field('name'), 
Field('email')) 

제어기는

@service.run 
def display_form(): 
form = SQLFORM(db.person) 
if form.accepts(request.vars): 
    return "success" 
else: 
    return "failure" 

는 HTTP 포스트 변수 데이터 = { "이름"으로 송신된다 포함 포함 "XYZ를 @ gmail.com "}

내가 게시물 변수를 올바르게 sendign인지 여부를 알고 싶습니다. 나는 항상 실패 메시지를 받는다. DB가 업데이트되지 않는 이유는 무엇입니까? 제발 좀 도와주세요. 사실 저는 이것을 form = auth.register()로하고 싶습니다. 서비스 호출을 통해 인증 테이블 값을 입력해야합니다. 그러나 이것은 먼 길입니다. 사전


안토니에

감사합니다,

이것은 내가 게시하고있는 방법입니다.

url = "http://mydomain.com/myapp/mycontroller/api/person" 
data = {"name":"peter","email":"[email protected]"} 
datatosend = urllib.urlencode(data) 
request = urllib2.Request(url,datatosend) 
res = urllib2.urlopen(req) 

하지만 api의 POST 메서드는 사람을 전혀 보지 못합니다. 도와주세요. 나는 긴급한 필요가있다.

답변

0

을 통해 양식을 만들면 특별한 숨겨진 _formname 필드가 양식에 추가됩니다. 게시 된 데이터에 일치하는 _formname 필드가 없으면 form.accepts() 메서드가 실패합니다. 디폴트는 FormName 대신에, 당신이 당신의 자신을 지정할 수 있으며, 게시 된 데이터에 추가 :

@service.run 
def display_form(): 
    request.vars._formname = 'myform' 
    form = SQLFORM(db.person) 
    if form.accepts(request.vars, formname='myform'): 
     return 'success' 
    else: 
     return 'failure' 

하지만, 훨씬 더 간단한 방법은 기록을 모두 양식을 방지하고 직접 삽입하는 것입니다 (아직 활용 validate_and_insert 방법을 사용하여 유효성 검사 프로세스) :

@service.run 
def display_form(): 
    return db.person.validate_and_insert(**request.vars) 

이 성공했을 경우 또는 유효성 검사 오류 달리 삽입 된 레코드 ID를 반환합니다.

@service.run에 대한 대안은 새로운 RESTful web services 기능입니다 :

@request.restful() 
def api(): 
    def POST(tablename, **fields): 
     if not tablename == 'person': raise HTTP(400) 
     return db.person.validate_and_insert(**fields) 
    return locals() 

그런 다음에 POST 요청을 통해 레코드를 삽입 :

http://mydomain.com/myapp/mycontroller/api/person

+0

감사 안토니,하지만 당신은 이유를 설명해 주 시겠어요 내 질문에 표시된 기능이 예상대로 작동하지 않습니다. – athinker

+0

anthony, 나는 안락한 webservice를 시도했지만 요청을받지 못하고있다. 그것은 어디서나 tablename을 식별하지 않습니다. POST에 urllib2를 사용하고 있습니다. – athinker

+0

위의 업데이트 된 답변보기 @ request.restful 버전이 저에게 효과적입니다 - 아마도 POST 요청에 잘못된 것이 있습니다. – Anthony

관련 문제