2017-12-10 16 views
0

私は現在、ウェブサイトのユーザー向けにWebベースの認証システムを構築しようとしています。これは私のHTMLログインフォームです:フォームリクエスト後に空のリクエストボディ(Pythonサーバー、HTMLフォーム)

<form action="/auth" method="post" class="pure-form pure-form-stacked"> 
    <fieldset> 
     <legend>Login</legend> 
     <label for="username">Username</label> 
     <input id="username" type="username" placeholder="Username"> 

     <label for="password">Password</label> 
     <input id="password" type="password" placeholder="Password"> 

     <button type="submit" class="pure-button pure-button-primary"> 
      Login 
     </button> 
    </fieldset> 
</form> 

は通常、私はそれは、リクエストボディの内側の両方資格情報を使用して、サーバーにリクエストを送信するために期待していたので、私の/認証ルートは、それらを確認することができます。しかし、私が使っているPostメソッドのパーサーは、リクエストボディの中に何も見つからないようです。私はコードの重要な通路にいくつかのトレース出力を追加しました

class Request: 
    """ 
    http request data. 
    """ 

    def __init__(self): 
     self.headers = {} 
     self.method = None 
     self.protocol = None 
     self.resource = None 
     self.path = None 
     self.params = {} 
     self.origin = None # will be set from server 

    def parse(self, conn): 
     """Parses an http-Request and return a dictionary with process_request line values and headers.""" 
     self.headers = {} 

     # read process_request line 
     request_line = conn.readline().decode('utf-8').strip() 
     log(1, "Request-Line: %s" % request_line) 
     if not request_line: # rfc says "server SHOULD ignore blank request lines" 
      return None 

     # parse process_request line 
     try: 
      self.method, self.resource, self.protocol = request_line.split(" ") 
     except ValueError: 
      raise StopProcessing(400, "Bad request-line: %s\n" % request_line) 

     # parse resource to path and params 
     # extract GET parameters 
     from urllib.parse import urlparse, parse_qs # analyse urls and parse query strings 
     requrl = urlparse(self.resource) 
     self.path = requrl.path 
     self.params.update(parse_qs(requrl.query)) 

     # read and parse Request-Headers 
     while True: 
      header_line = conn.readline().decode('utf-8').strip() 
      if not header_line: 
       break 
      log(2, "Header-Line: " + header_line) 
      (headerfield, headervalue) = header_line.split(":", 1) 
      self.headers[headerfield.strip()] = headervalue.strip() 

     # read cookies 
     if 'Cookie' in self.headers: 
      log(2, "Cookie ist: %s" % self.headers['Cookie']) 
      self.cookies = Cookie.parse(self.headers['Cookie']) 
     else: 
      self.cookies = {} 

     # parse POST parameters 
     log(1,"Methode %s" % self.method) 
     if self.method == 'POST' or self.method == 'post': 
      postbody = conn.read(int(self.headers['Content-Length'])).decode('utf-8') 
      self.params.update(parse_qs(postbody)) 

     # all parameter values are lists 
     # replace lists by the only element if there is only one 
     for key in self.params: 
      if len(self.params[key])==1: 
       self.params[key] = self.params[key][0] 

     return self.headers 

と私が見つけた私のパーサは常に空を返したことだった:これは私の要求パーサー(それは後のパラメータをチェックし、それの一部であります辞書{}。 私は何をしないのですか?何のアドオン全くこのフレームワークで使用されるものではなく 。それは純粋なPythonのである。

+0

残念ながら、もう少し詳しく知ることなく基本的なフレームワークでは、私たちは手助けできません。このフラスコですか? Django? – cwallenpoole

+0

それはフレームワークで使用される純粋なpythonです。アドオンは全くありません。 hinのおかげで、私は私の質問を更新する! –

+0

'parse_qs'とは何ですか? 'conn'とは何ですか? 'self.method'はどのように設定されていますか?なぜself.methodは小文字と大文字のメソッド名をサポートしていますか? – cwallenpoole

答えて

1

あなたは、フォームの入力にname属性を設定する必要があり、idは特定していませんフォーム上の入力

+0

@PakUulaのように見えますが、私の答えは私の意見です。 – tech4him

関連する問題