用戶資料頁面
在用戶資料頁面,基本上沒有什么特別要強調和介紹的新概念。只需要創建一個含有HTML的新視圖函數模板頁面即可。
下面是視圖函數(項目目錄/views.py):
@app.route('/user/<nickname>')@login_requireddef user(nickname): user = User.query.filter_by(nickname = nickname).first() if user == None: flash('不存在用戶:' + nickname + '!') return redirect(url_for('index')) posts = [ { 'author': user, 'body': 'Test post #1' }, { 'author': user, 'body': 'Test post #2' } ] return render_template('user.html', user = user, posts = posts)
這里的@app.route標識主要是用來說明此視圖函數不同于之前的那些。我們定義了一個名為<nickname>的參數。在函數里面它會轉化成跟它同名的參數,當用戶有請求的時候,例如這樣的一個URL:URL/user/miguel,次視圖函數就會識別為有一個名為nickname值為'miguel'的參數,即nickname = 'miguel'。
沒必要為此方法的實現過程感到驚訝。首先我們需要通過把轉化后的nickname參數作為條件,嘗試著從數據庫里把此用戶的數據調用出來。如果沒有查詢到數據,我們就像之前那樣,給用戶一個錯誤的提示并且跳轉到主頁去。
一旦我們找到了改用戶,我們就在模板下面來顯示該用戶的文章。要注意下的是在用戶資料頁面我們只讓顯示該用戶的文章,所以文章的作者要是該用戶。
初始化的視圖模板非常的簡單(項目目錄/templates/user.html):
<!-- extend base layout -->{% extends "base.html" %} {% block content %}<h1>用戶昵稱: {{user.nickname}}!</h1><hr>{% for post in posts %}<p> {{post.author.nickname}} 發布了: <b>{{post.body}}</b></p>{% endfor %}{% endblock %}
用戶資料頁面就做好了,不過在站點中還沒有指向改頁面的鏈接地址。為了讓用戶很方便的來查看自己的資料信息我們就把鏈接地址放到最上面的導航上去(項目目錄/templates/base.html):
<div>Microblog: <a href="{{ url_for('index') }}">Home</a> {% if g.user.is_authenticated() %} | <a href="{{ url_for('user', nickname = g.user.nickname) }}">你的個人資料</a> | <a href="{{ url_for('logout') }}">退出登陸</a> {% endif %} </div>
注意一下我們已經給函數傳參了之后的和之前的URL。
現在就來試一試這個項目。點擊上面的“你的資料”鏈接就會跳轉到用戶資料頁面。由于我們還沒有指向一個隨意用戶資料頁面的鏈接地址,所以在這里如果你想看他人的資料,就需要自己手動輸入一下地址了。比如你想看miguel的資料,那么地址就是:http://localhost:5000/user/miguelt
新聞熱點
疑難解答