2014-12-10 2 views
2

사용자를 등록하기위한 페이지를 만들려고하지만 부트 스트랩 양식의 제출 버튼이 작동하지 않습니다. 제출 버튼을 누르면 잘못된 요청 오류가 발생합니다.플라스크 파이썬 제출 버튼

@app.route('/register', methods=['GET', 'POST']) 
def register(): 
    if request.method == 'POST': 
     if not request.form['username']: 
      error = 'You have to enter a username' 
     elif not request.form['email'] or '@' not in request.form['email']: 
      error = 'You have to enter a valid email address' 
     elif not request.form['password']: 
      error = 'You have to enter a password' 
     elif get_user_id(request.form['username']) is not None: 
      error = 'The username is already taken' 
     else: 
      print(request.form['username']) 
      db = get_db() 
      db.execute('INSERT INTO user (username, email, pw_hash) VALUES (?, ?, ?)', 
         [request.form['username'], request.form['email'], 
         generate_password_hash(request.form['password'])]) 
      db.commit() 
      flash('You were successfully registered and can login now') 
      return render_template('control.html') 
    return render_template('register.html') 

또한 나는 HTML 파일 register.html이 : 여기 내 파이썬 파일의 코드는

{% extends 'layout.html' %} 
{% block title %}Sign-up{% endblock title %} 
{% block body %} 
<div class="container"> 
    <form class="form-register" role="form" method="post" action="{{ url_for('register') }}"> 
     <h2 class="form-register-heading">Please sign up</h2> 
     <label for="username" class="sr-only">Username</label> 
     <input type="username" id="inputUsername" class="form-control" value="{{ request.form.username }}" placeholder="Username" required autofocus> 
     <label for="email" class="sr-only">Email address</label> 
     <input type="email" id="inputEmail" class="form-control" value="{{ request.form.email }}" placeholder="Email address" required autofocus> 
     <label for="password" class="sr-only">Password</label> 
     <input type="password" id="inputPassword" class="form-control" placeholder="Password" required > 
     <button class="btn btn-lg btn-primary btn-block" type="submit">Sign up</button> 
    </form> 

</div> 
{% endblock body %} 

내가 잘못했던 곳 내가 파이썬에 새로 온 사람, 찾을 수 없습니다 그리고 플라스크!

+1

'@의 app.route ('/ 레지스터/'방식 ='GET ','POST '])' 이것을 시도 POST 요구가 여전히 '/'I이 시도 – abhishekgarg

+1

하지만 끝나야 감사합니다 – alpi

답변

2

input 필드에는 name 속성이 없습니다. 그러면 모든 수표가 KeyError 초가됩니다. 첫 번째 단계는 각 입력에 속성을 추가하는 것입니다. 더 username이 존재하지 않는 것처럼 나는 또한 type 속성을 확인

<input name="username" type="text" id="inputUsername" class="form-control" value="{{ request.form.username }}" placeholder="Username" required autofocus> 

참고. emailpassword은 유효한 값이며 HTML5에 email이 추가되었습니다.

다음 단계는 필드 확인 방법을 변경하는 것입니다. 현장의 존재에만 관심이 있다면 in 가야합니다. 그러나, 당신은 또한 truty 값을 원하는 경우에

if 'username' not in request.form: 

get 방법은 당신이 원하는 것입니다.

if not request.form.get('username'): 
+0

대단히 감사합니다, 귀하의 답변의 첫 번째 단계는 내 문제를 완전히 해결! – alpi

관련 문제