m0_69693998 2025-01-14 20:38 采纳率: 38%
浏览 11

(标签-flask|关键词-for)

flask,按照网上查的要求,配置了cors,允许全部,为什么前端访问还是会报错,是后端的问题还是前端的问题


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>我的博客</title>
        <link rel="stylesheet" href="styles.css">
    </head>
    <body>
        <header>
            <nav>
                <ul>
                    <li><a href="index.html">首页</a></li>
                    <li><a href="search.html">搜索</a></li>
                    <li><a href="my.html">我的</a></li>
                    <li><a href="register.html">注册</a></li>
                    <li><a href="login.html">登录</a></li>
                </ul>
            </nav>
        </header>
        <section class="blog-header">
            <h1>我的博客</h1>
        </section>
        <main>
            <div class="blog-container" id="blog-container">
                <!-- 博客内容将通过 JavaScript 动态插入 -->
            </div>
        </main>
        <footer>
            <p>© 2025 我的博客</p>
        </footer>

        <!-- 内联 JavaScript,放在 body 标签结束前 -->
        <script>
            const apiUrl = "http://127.0.0.1:5000/ruan/my";

            const blogContainer = document.getElementById("blog-container");
            const token = localStorage.getItem('token');

            fetch(apiUrl, {
            method: 'GET',
            headers: {
                'Authorization': `Bearer ${token}`, 
                'Content-Type': 'application/json'
            },
            // mode: 'no-cors' ,// 会让响应无法访问内容 
        })
        .then((response) => {
            // If response is not OK (not a 2xx status)
            if (!response.ok) {
                // If the response body is empty or text, handle it
                return response.text().then((text) => {
                    console.error("后台错误:", text);  // Log raw text response for debugging
                    throw new Error(text || "请求失败!");
                });
            }

            // Try to parse the response body as JSON
            return response.json().catch((err) => {
                // If there's an error parsing the JSON (e.g., empty or malformed JSON)
                console.error("无法解析 JSON:", err);
                throw new Error("无法解析返回的 JSON 数据");
            });
        })
        .then((data) => {
            // If data is successfully fetched and parsed
            console.log("Data fetched:", data);
            if (data && Array.isArray(data.data)) {
                data.data.forEach((item) => {
                    const blogCard = document.createElement("div");
                    blogCard.className = "blog-card";

                    const blogTitle = document.createElement("h2");
                    blogTitle.textContent = item.title;
                    blogCard.appendChild(blogTitle);

                    const blogLink = document.createElement("a");
                    blogLink.className = "blog-link";
                    blogLink.href = `/blog/${item.id}`;
                    blogLink.textContent = "查看详情";
                    blogCard.appendChild(blogLink);

                    blogContainer.appendChild(blogCard);
                });
            } else {
                blogContainer.innerHTML = "<p>没有找到博客内容。</p>";
            }
        })
        .catch((error) => {
            // Catch any errors that occur during the fetch or JSON parsing
            console.error("数据获取失败:", error.message);
            blogContainer.innerHTML = `<p>加载数据失败: ${error.message}</p>`;
        });
        </script>
    </body>
    </html>

前端代码

# app.py
from flask import Flask
import config
from exts import init_exts
import middleware
from blueprint.auth import dp as auth_dp
from blueprint.qa import dp as qa_dp
from flask_cors import CORS

app = Flask(__name__)
# 配置 CORS
CORS(app, supports_credentials=True, resources={r"/*": {"origins": "*"}})
# 加载配置
app.config.from_object(config)
# 初始化扩展
init_exts(app)
# #设置中间件
middleware.init_app(app)
# 注册蓝图
app.register_blueprint(auth_dp)
app.register_blueprint(qa_dp)

if __name__ == '__main__':
    app.run(debug=True)


```python
import random
import time
from flask import Blueprint, request, jsonify,g
from flask_jwt_extended import create_access_token
from flask_mail import Message
import models
from exts import mail, db

dp = Blueprint("qa", __name__, url_prefix="/ruan")

@dp.route("/my", methods=["GET", "POST"])
def my():
    data = request.get_json(silent=True) or {}
    user = getattr(g, "token", None)
    search = data.get("search", '')
    if not search:
        query = db.session.query(models.blog).filter(models.blog.user_id == user["id"]).all()
    else:
        query = db.session.query(
            models.blog.title,
            models.blog.id,
        ).filter(
            models.blog.user_id == user["id"],
            models.blog.title.like(f"%{search}%")
        ).all()
    result = [{"id": item.id, "title": item.title} for item in query]
    return jsonify({"data": result})

后端代码

img

img

img

  • 写回答

4条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你的描述和给出的错误信息来看,这个问题可能与CORS策略设置或后端服务有关。当你尝试从前端(例如,使用fetch API)访问后端API时,浏览器会因为CORS策略阻止请求。错误信息显示“从'null'的原点访问 '[http://127.0.0.1:5000/ruan/my'已被CORS策略阻止。”这表明浏览器尝试从一个没有定义的原点(origin)发起请求,或者你的CORS策略没有配置正确。](http://127.0.0.1:500/ruan/my'%E5%B7%B2%E8%A2%ABCORS%E7%AD%96%E7%95%A5%E9%98%BB%E6%AD%A2%E3%80%82%E8%BF%99%E8%A1%A8%E6%98%BE%E7%A4%BE%E6%B5%8F%E8%A7%88器%E5%B0%BD%E5%8A%BE发起尝试从一个未定义的原点或错误的URL访问API。

    解决这个问题的方法可能有以下几种:

    1. 检查你的CORS配置:确保你的CORS配置允许来自前端页面的请求。在你的Flask应用中,你已经使用了flask_cors库并设置了CORS规则。请检查这些规则是否正确配置,并确保它们适用于你的前端页面。你可能需要为特定的路由设置CORS规则。
    2. 检查你的前端代码:在你的前端JavaScript代码中,确保你设置了正确的请求头信息。如果你的API需要身份验证或其他请求头,确保它们在fetch请求中正确设置。此外,检查你的URL是否正确。在你的代码中,你尝试访问的URL是http://127.0.0.1:5000/ruan/my,请确保这是正确的API端点。
    3. 检查你的后端服务:确保你的后端服务正在运行并正确响应请求。你可以使用工具如Postman来测试你的API是否正常运行。如果API无法正常运行或返回错误响应,那么这可能是导致问题的原因。

    如果这些步骤不能解决问题,请提供更多的代码和错误信息,以便我能更准确地诊断问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月14日