首頁  >  問答  >  主體

python flask前後端互動問題

##我想下面的id等於上面的user.id但是我不知道怎麼取得這個值

阿神阿神2711 天前907

全部回覆(3)我來回復

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-18 11:00:21

    謝邀。直接用視圖函數的參數就好了。

    http://flask.pocoo.org/docs/0...

    回覆
    0
  • 迷茫

    迷茫2017-05-18 11:00:21

    謝邀,這裡提供一種思路,使用flask_wtf來進行前後端表單交互,入門可以看
    http://flask123.sinaapp.com/a...

    這裡舉一個簡單的登陸範例:
    首先要在後端構造表單,在forms.py中定義:

    from flask_wtf import Form
    from wtforms import StringField, PasswordField, BooleanField, SubmitField
    from wtforms.validators import Required, Length, Email, Regexp, EqualTo
    
    #自定义的表单都要继承于flask_wtf中的Form表单
    class LoginForm(Form):
        email = StringField('登陆邮箱', validators=[Required(), Length(1, 64),
                                                Email()])
        password = PasswordField('密码', validators=[Required()])
        remember_me = BooleanField('记住我')
        submit = SubmitField('登陆')

    那麼如何把這個表單放到網頁上呢?我們先來看login.html吧:

    {% extends "base.html" %}
    <!-- 注意这里要导入bootstrap/wtf.html -->
    {% import "bootstrap/wtf.html" as wtf %}
    {% set active_page = "login" %}
    {% block title %}登陆{% endblock %}
    
    {% block page_content %}
    <p class="container">
        <p class="page-header" style="margin-top: 120px;">
            <h1 class="white">登陆</h1>
        </p>
        <p class="col-md-4" >
        
            <!-- 这里使用wtf.quick_form即可创建表单,那么form哪里来呢?看下面 -->
            {{ wtf.quick_form(form) }}
            
            <br>
            <p>忘记密码? <a href="{{ url_for('auth.password_reset_request') }}">重置密码。</a></p>
            <p>没有账号? <a href="{{ url_for('auth.register') }}">注册。</a></p>
        </p>
    </p>
    {% endblock %}

    那麼login.html中的form是哪里来的呢?让我们来看路由views.py中的form是哪裡來的呢?讓我們來看看路由views.py

    from flask import render_template, redirect, request, url_for, flash
    from .forms import LoginForm
    from ..models import User
    
    @auth.route('/login', methods=['GET', 'POST'])
    def login():
        #从forms.py中导入刚刚建好的 LoginForm()
        form = LoginForm()
        #【你要的答案在这里,当用户提交表单后会执行下列语句】
        if form.validate_on_submit():
            #用form.xxx.data即可获取数据,这里使用了form.email.data获取了用户输入的email进行查询
            user = User.query.filter_by(email=form.email.data).first()
            #如果查询到用户并且密码正确的话
            if user is not None and user.verify_password(form.password.data):
                #登陆用户,并重定向到之前的页面或主页
                login_user(user, form.remember_me.data)
                return redirect(request.args.get('next') or url_for('main.index'))
            #否则提示用户用户名不对或密码不对
            flash('Invalid username or password.')
        #!!!这里要注意,第一次用户开进这个登陆界面的时候是直接执行下面这条语句的,要注意把form传入,jinja2才可以对表单进行渲染。
        return render_template('auth/login.html', form=form)

    同樣還是《Flask Web開發:基於Python的Web應用開發實戰》這本書裡的內容,今天又複習了一下~哈哈,所以樓主想學Flask的話還是推薦看看這本書哦~ 有什麼問題也歡迎繼續提問,謝謝~~

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-18 11:00:21

    使用request上下文

    from flask import request
    
    # ...
    
    user = User.query.filter_by(User.id==request.args.get('id', 0))

    回覆
    0
  • 取消回覆