Python :
#!flask/bin/python
import pymysql.cursors
from flask import Flask, request, render_template,Response
app = Flask(__name__)
@app.route('/test_server', methods=['GET', 'POST'])
def remove_group():
if request.method == "GET":
resp = Response(response='4',status=200,content_type='text/html;charset=utf-8')
return resp
return render_template("index.html")
if __name__ == '__main__':
app.run(
host="127.0.0.1",
port=int("8000"))
Html:
<!DOCTYPE html>
<html>
<body>
<h2>Using the XMLHttpRequest Object</h2>
<div id="demo">
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</div>
<script>
function loadXMLDoc() {
var xhttp = new XMLHttpRequest();
let url= 'http://127.0.0.1:8000/test_server?name=test';
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML =
this.responseText;
}
};
xhttp.open("GET", url, true);
xhttp.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
xhttp.send();
}
</script>
</body>
</html>
參考了:
https://www.w3schools.com/xml/xml_http.asp
https://gist.github.com/KentaYamada/2eed4af1f6b2adac5cc7c9063acf8720
https://jeffwen0105.com/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8-python-flask-restful-api-%E5%B0%B1%E4%B8%8A%E6%89%8B-get-%E6%96%B9%E6%B3%95/
三個網址我都試過,第一個網站我了解到他是在open那邊獲得responseText,
第二網站如果完全抄code是沒辦法跑,但大概知道可能需要GET & POST 的功能,
第三個網站知道原來還有return 寫法,結果怎麼寫都是 java端那邊都是收不到return的值
求大神找找原因,小弟我已經卡了快兩天都找不到頭緒。
更:
我好像找到問題了,都不是出在程式的問題,而是因為我開了xampp的apache 然後網頁地址是127.0.0.1:80
然後flask的地址是:127.0.0.1:8000
flask會收到網頁的req並顯示正確收到:a
127.0.0.1 - - [01/Sep/2022 10:56:17] "GET /api/test HTTP/1.1" 200 -
但回傳時header好像就會錯誤,網頁端就會出現:
Ensure CORS response header values are valid
給你幾個方向
curl -X POST 'http://127.0.0.1:8000' \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "name=test" \
route_base = "/api"
@expose('/SendMAIL', methods=['POST'])
@expose('/SendMAIL/', methods=['POST'])
def SendMAIL(self):
dic = request.form
print (dic)
print (dic['message'])
u = get_user(dic) # mailaddr 去取 user
a = db.session.query(Member).filter_by(user = u).first()
if(a is None):
return jsonify([{'error_Code':403,'error_Message':'user fail'}])
# 這段程式就不貼了
return response.text
$(document).ready(function() {
$("#submitID").click(function() { //ID 為 submitID 的按鈕被點擊時
CKupdate();
var sendData = $('#submitID').serialize();
$.ajax({
type: "POST",//傳送方式
url: $SCRIPT_ROOT + "/api/SendMAIL/", //傳送目的地
dataType: "json", //資料格式
data: { //傳送資料
subject: $("#subject").val(), //表單字段 ID subject
mailaddr: $("#mailaddr").val(), //表單字段 ID mailaddr
message: $("#message").val() //表單字段 ID message
},
beforeSend: function () {
$("#submitID").val("處理中");
$("#submitID").css("background-color","aqua");
$("#submitID").attr({ disabled: "disabled" });
},
success: function(data) {
const myJSON = JSON.stringify(data);
$("#result").html( '<font color="#007500">回應 : <font color="#0000ff"><br />'+myJSON );
},
complete: function () {
$('#loading-image').remove();
$("#submitID").val("發送");
$("#submitID").css("background-color","red");
$("#ResetID").css("background-color","red");
$("#ResetID").attr({ disabled: "disabled" });
},
error: function(jqXHR) {
$("#datainput")[0].reset(); //重設 ID 為 datainput 的 form (表單)
$("#result").html('<font color="#ff0000">發生錯誤:' + jqXHR.status + '</font>');
}
})
我好像找到問題了,都不是出在程式的問題,而是因為我開了xampp的apache 然後網頁地址是127.0.0.1:80
然後flask的地址是:127.0.0.1:8000
flask會收到網頁的req並顯示正確收到:a
127.0.0.1 - - [01/Sep/2022 10:56:17] "GET /api/test HTTP/1.1" 200 -
但回傳時header好像就會錯誤,網頁端就會出現:
Ensure CORS response header values are valid
應該是說... 要看所有東西的 LOG
不懂的是 為何你要把 前端與 API 分開
API 可對外服務的 ....
flask 是可以直接當前端
apache 或 nginx 配合wsig 當反向代理
我是 nginx 直接連到 flask 或 django 當前端
所有東西都在 flask 或 django 的 router 內處理
前後端都是在 flask 或 django 比較不會搞混
參考這篇 Flask實作_基礎_07_POST and GET
我把他 return 的 form 另存到 index.html
route 跟 form 送出的先改成 "/"
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method='post' action='/'><input type='text' name='username' />
</br>
<button type='submit'>Submit</button></form>
</body>
</html>
app.py
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return 'Hello:' + request.values['username']
return render_template("index.html")
if __name__ == '__main__':
app.debug = True
app.run()
正常來說一開始是 GET,會得到 return render_template("index.html")
的結果
打字,按鈕送出是 POST,會得到 return 'Hello:' + request.values['username']
的結果
我好像找到問題了,都不是出在程式的問題,而是因為我開了xampp的apache 然後網頁地址是127.0.0.1:80
然後flask的地址是:127.0.0.1:8000
flask會收到網頁的req並顯示正確收到:a
127.0.0.1 - - [01/Sep/2022 10:56:17] "GET /api/test HTTP/1.1" 200 -
但回傳時header好像就會錯誤,網頁端就會出現:
Ensure CORS response header values are valid
看了你這樣回我就知道問題在哪了。
let url= 'http://127.0.0.1:8000/test_server?name=test';
改成
let url= '/test_server?name=test';
froce 還是不行,但我有成功的方法,不過不是正解。
現在因為我的網頁是用xampp的apache打開,然後我網頁端req 資源的地方是本地端,而由於我開網頁已經佔用了本地端127.0.0.1:80 的地方 所以我用python run地址在127.0.0.1.80 會衝到,然後我關掉apache 網頁就會讀到python 那邊的資料(成功互相溝通),但是不是長久之計,因為我關掉apache代表我網頁一旦換頁就會404
這樣你的 port 就要不同吧,就像 80 跟 8000
對 apache 不熟,沒辦法驗證