flaskで作成しています。methods=["POST"]の状態だとうまく動かずにNot foundと出ますが何も指定しないとうまく動きます。POSTと指定するのが正解だと思うのですがなぜPOSTだと動かないのでしょうか?
curlを使ってPOSTで送信してみるとhtmlが返ってきて正常に動いていると思います。
postでhtmlから送信がうまく出来ていないということでしょうか?
pythonのほうではエラー等でていませんでした。
教えてください。お願い致します。
@app.route('/insert')の場合
python
1from flask import Flask, render_template, request, redirect, url_for 2from flask_sqlalchemy import SQLAlchemy 3 4app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{ 5 'user': '', 6 'password': '', 7 'host': '', 8 'db_name': '' 9}) 10app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False 11app.config['SQLALCHEMY_ECHO'] = False 12# dbの初期化 13db = SQLAlchemy(app) 14class Shohin(db.Model): 15 __tablename__ = 'Shohin' 16 id = db.Column(db.Integer, primary_key=True) 17 name = db.Column(db.Text) 18 price = db.Column(db.Integer) 19 20 21@app.route('/result', methods=['GET']) 22def result(): 23 datas = Shohin.query.all() 24 return render_template("index3.html", lists=datas) 25 26@app.route('/insert', methods=["POST"]) 27def insert(): 28 name_txt = request.form['name'] 29 price_txt = request.form['price'] 30 shohin = Shohin() 31 shohin.name = name_txt 32 shohin.price = price_txt 33 db.session.add(shohin) 34 db.session.commit() 35 return redirect("/portfolio/result") 36 37 38if __name__ == "__main__": 39 app.run(host='0.0.0.0', debug=True)
html
1<body> 2 <div> 3 <table> 4 <thead> 5 <tr> 6 <th>ID</th> 7 <th>商品名</th> 8 <th>値段</th> 9 </tr> 10 </thead> 11 <tbody> 12 {% for item in lists %} 13 <tr> 14 <th>ID</th> 15 <th>{{item.name}}</th> 16 <th>{{item.price}}</th> 17 </tr> 18 {% endfor %} 19 </tbody> 20 </table> 21 </div> 22 <form action='insert' method="POST"> 23 <p><新規登録></p> 24 <label> 25 商品名 26 <input type="text" name="name"> 27 </label> 28 <label > 29 値段 30 <input type="text" name="price"> 31 </label> 32 <button type="submit">登録</button> 33 </form> 34 35</body> 36</html>
cgi
1#! /home/ユーザーid/anaconda3/bin/python 2from sys import path 3import os 4from wsgiref.handlers import CGIHandler 5from flask_sample import app 6from werkzeug.middleware.proxy_fix import ProxyFix 7 8 9path.insert(0, '/サイト名/portfolio/') 10 11 12class ProxyFix(object): 13 def __init__(self, app): 14 self.app = app 15 16 def __call__(self, environ, start_response): 17 # ※要書き換え 18 environ['SERVER_NAME'] = "サイト名" 19 environ['SERVER_PORT'] = "80" 20 environ['REQUEST_METHOD'] = "GET" 21 environ['SCRIPT_NAME'] = "" 22 if 'PATH_INFO' not in environ: 23 environ['PATH_INFO'] = '' 24 environ['QUERY_STRING'] = "" 25 environ['SERVER_PROTOCOL'] = "HTTP/1.1" 26 return self.app(environ, start_response) 27 28 29if __name__ == '__main__': 30 app.wsgi_app = ProxyFix(app.wsgi_app) 31 CGIHandler().run(app)
htaccess
1RewriteEngine On 2RewriteCond %{REQUEST_FILENAME} !-f 3RewriteRule ^(.*)$ /portfolio/index.cgi/$1 [QSA,L]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/16 11:50
2022/06/16 11:52
2022/06/16 12:11
2022/06/16 12:32
2022/06/16 13:21