简单的sijax exapmale don

2024-10-16 20:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学Python和烧瓶,我没有什么经验,但有些事情是不可能的。 使用通常的AJAX没有任何问题,但是我决定试试sijax,即使是一个简单的例子也不行。我确信这是由于错误的连接和初始化造成的,因为我是从官方存储库git hub中克隆git的,而且一切正常。在

在这三个示例中,sijax在一个文件应用程序中工作和初始化,我想在blueprint中使用

如果我单击<a href="javascript://"onclick="Sijax.request('say_hi');">Say Hi!</a> 回溯返回:127.0.0.1--[12/Sep/2016 14:19:56]“POST/HTTP/1.1”400-

应用程序初始化

import os
from flask import (Flask,
                   redirect,
                   url_for,
                   session)
# from flask_login import LoginManager
from flask_wtf.csrf import CsrfProtect
from os import path

from .database import db
from werkzeug.contrib.fixers import ProxyFix
import flask_sijax

import hmac
from hashlib import sha1

def create_app(config=None):
    app = Flask(__name__)
    app.config.from_object(os.environ['APP_SETTINGS'])
    app.wsgi_app = ProxyFix(app.wsgi_app)
    db.init_app(app)
    app.config["SIJAX_STATIC_PATH"] = os.path.join('.', os.path.dirname(__file__), 'static/js/sijax/')
    app.config["SIJAX_JSON_URI"] = '/static/js/sijax/json2.js'
    '''
    if app.debug == True:
        try:
            from flask_debugtoolbar import DebugToolbarExtension
            toolbar = DebugToolbarExtension(app)
        except:
            pass
    '''



    with app.test_request_context():
        db.create_all()

    from .general import controllers as general
    from .shop import controllers as shop
    from .test import controllers as test
    app.register_blueprint(shop.module)
    app.register_blueprint(general.module)
    app.register_blueprint(test.module)

    flask_sijax.Sijax(app)
    CsrfProtect(app)

    @app.template_global('csrf_token')
    def csrf_token():
        """
        Generate a token string from bytes arrays. The token in the session is user
        specific.
        """
        if "_csrf_token" not in session:
            session["_csrf_token"] = os.urandom(128)
        return hmac.new(app.secret_key, session["_csrf_token"],
                        digestmod=sha1).hexdigest()

    @app.route('/')
    def index():
        return redirect(url_for('test.index'))

    return app

测试蓝图控制器.py在

^{pr2}$

模板你好.html在

<!doctype html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script src="{{ url_for('static', filename='js/sijax/sijax.js') }}"></script>
    <script src="{{ url_for('static', filename='js/sijax/json2.js') }}"></script>
    <script>{{ g.sijax.get_js()|safe }}</script>
</head>

<body>
    <a href="javascript://" onclick="Sijax.request('say_hi');">Say Hi!</a>
</body>
</html>

Tags: fromtestimporttokenappurlflaskfor
1条回答
网友
1楼 · 发布于 2024-10-16 20:41:31

原因不是sijax工作,而是{csrf}token()}不是活动的

必须这样做:<a href="javascript://" onclick="Sijax.request('say_hi', { data: { csrf_token: '{{ csrf_token() }}' } });">Say Hi!</a>

连接到html文件:

<script type="text/javascript">
    var csrfToken = "{{ csrf_token() }}"
</script>

相关问题 更多 >