구구단 문제풀이 질문
339
投稿した質問数 2
구구단 출력 문제인데 질문이 있습니다.
from flask import Flask
from flask import render_template
from flask import redirect
from flask import request
from flask import url_for
app = Flask(__name__)
@app.route("/")
@app.route("/<int:num>", methods=['POST', 'GET'])
def gugudan(num=None):
if request.method == 'GET':
return render_template('index.html', gugudan=None)
else:
temp = request.form['input']
return render_template('index.html', gugudan=temp)
if __name__ == "__main__":
app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="{{ url_for('static', filename='file.css') }}">
</head>
<body>
<form action="/" method="POST">
<p><input type="text"/ id="input" value="name"><input type="submit"></button></p>
<form>
{% if gugudan == None%}
<p>Have to Type number</p>
{% else %}
<p>숫자가 입력되었습니다</p>
{% endif %}
</body>
</html>
위와 같이 main.py에서 method 타입을 2가지로 나눠서 한번에 처리도 가능할거라 생각했는데, method not allowed가 나오네요.
혹시 무엇이 문제일까요?
回答 1
0
html 파일에 오탈자 수정이 필요합니다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="{{ url_for('static', filename='file.css') }}"> </head> <body> <form action="/" method="POST"> <p> <input type="text" id="input" value="name"> <input type="submit"/> </p> </form> {% if gugudan == None%} <p>Have to Type number</p> {% else %} <p>숫자가 입력되었습니다</p> {% endif %} </body> </html>form 태그의 action을 보면 "/" 라고 입력되어있고, app.py에서 "/"는 메서드 방식이 지정되어 있지 않습니다. 임시로 post와 get 모두 받을 수 있게 지정해주겠습니다.
@app.route("/", methods=['POST', 'GET'])
@app.route("/<int:num>", methods=['POST', 'GET'])
def gugudan(num=None):
if request.method == 'GET':
return render_template('index.html', gugudan=None)
else:
temp = request.form['input']
return render_template('index.html', gugudan=temp)
이렇게 코드를 수정하시고 실행시켜보시면 더 이상 method not allowed 에러가 나타나지 않을 겁니다.
그러나 Bad Request 에러가 나타나는데 이는 숫자를 넣을 input에 name이 할당되지 않은 채로 request.form을 사용해서 그렇습니다. name을 할당시켜줍니다.
그리고 기존에 name으로 줬던 value 값을 서버에서 받아오는 gugudan 값으로 바꾸고 아래에서 결과를 보기 쉽게 p태그 안에 나타나도록 코드를 추가합니다. (추가한 p 태그 부분은 이해하기 편하도록 넣은 코드이며, 제외해도 괜찮습니다.)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="{{ url_for('static', filename='file.css') }}">
</head>
<body>
<form action="/" method="POST">
<p>
<input type="text" id="input" name="input" placeholder="숫자를 입력하세요." value="{{ gugudan }}">
<input type="submit"/>
</p>
</form>
<p>gugudan = {{ gugudan }}</p>
{% if gugudan == None %}
<p>Have to Type numberc
{% else %}
<p>숫자가 입력되었습니다</p>
{% endif %}
</body>
</html>
이제 실행해보면 다음과 같이 나타납니다.
첫화면

숫자 제출

참고로 작성하신 코드에서는 버튼 클릭을 통해 "/<int:num>" 부분이 호출될 일은 절대 없습니다. (action이 /, 방식이 post이기 때문)
대신 인터넷 주소창에 /아무숫자입력 하고 이동을하면 숫자를 입력했다고 결과는 나올테지만, 실제로는 None 값이 찍히게 될텐데, 이는 get 방식이며, if문을 통해 get 방식일 경우 gugudan은 None으로 값을 주셨기 때문입니다.
====================================================
추가 내용으로, 위 코드는 숫자가 아닌 문자나 빈 값을 입력해도 숫자를 입력했다고 나타납니다.


온전히 숫자만 받기를 원한다면, input type을 number로 바꿔 문자 입력 자체를 차단하거나,
javascript를 이용해 숫자 이외의 문자나 빈 값이 들어오면 서버로 보내지 않고 경고 메세지를 띄우거나,
아니면 아예 서버 단에서 숫자인지 확인하고 아니라면 잘못된 숫자를 입력했다는 페이지로 안내하면 원래 의도대로 적용할 수 있겠습니다.
[restful API]서버 구성관련 문의드립니다.
0
516
1
[공유]파일서버 만들기_파일 다운로드 에러발생시 참고하세요
0
418
1
[데이터베이스 기초(Mongo DB),첫번째]mongo 실행관련
0
274
1
[Jinja2 연습문제 두번째] calcuate 접속시 화면
0
261
1
[get과post요청 처리방식 이해]03_get_post from action 문의
0
399
2
python for vscode extension이 없네요
2
351
2
127.0.0.1:5000 접속 시 오류
0
3207
1
동적 라우팅 관련하여 질문드립니다.
0
378
1
연습문제 풀이 질문입니다.
0
279
0
사진 업로드한 파일 사각화
0
275
1
기능 설명좀 해주세요..
0
209
0
잘 이해가 안가서 그런데!
0
217
1
디버그모드ㅠㅠ
0
174
0
수업이 중간에 끊기는데..
0
264
1
렌더템플릿안에는 경로 안써도 되나요?
0
298
1
혹시 render_template()에는 경로
0
260
0
안녕하세요 제가 코드를 써서 웹에 올려도 안되네요
0
189
1
프로젝트 진행 - 파일 서버 만들기 / 파일 검증 기능 만들기(19강)
0
347
1
<p>태그에 대해서 더 정확한 설명이 좀 필요합니다.
0
195
1
form.files.data 문의
0
220
0
수업내용이 좀 짤린거 같애요 말하는 도중에 수업이 끝나네요
1
118
0
파일서버 업로드
0
138
1
안녕하세요 플라스크 설치가 완료됐는데 VS code에서 연결이 안되나봐요
1
655
3
이미지 주소 삽입할 때 주소가 너무 길어요ㅠㅠ
0
280
0

