网站后端.Flask.实战-社交博客开发-资料页面?

FlaskWeb/app/auth/views.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# OsChina: http://my.oschina.net/pydevops/
# Purpose:
#
"""
from . import main
from ..models import Permission, User
from flask_login import login_required
from flask import render_template, redirect, url_for, abort
from ..decorators import admin_required, permission_required

@main.route('/admin')
@login_required
# @permission_required(Permission.ADMINISTER_POWER)
@admin_required
def admin():
    return redirect(url_for('admin.index'))

@main.route('/user/<username>')
def user(username):
    user = User.query.filter_by(username=username).first()
    if not user:
        abort(404)
    return render_template('user.html', user=user)

@main.route('/', methods=['GET', 'POST'])
def index():
    return render_template('index.html')

说明:为每个用户创建资料页面很简单,大多数Web程序为了方便搜索引擎抓取个人信息页面都无需登录即可直接读取,于是定义一个/user/<username>的路由,视图函数会在数据库中搜索URL中指定的用户名,并渲染user.html,并把用户名作为参数传入模版,不存在返回404,否则显示用户信息

FlaskWeb/app/templates/user.html

{%- extends 'base.html' -%}
{%- block page_content -%}
    <div class="page-header">
        {{ utils.flashed_messages(container=false, dismissible=true) }}
        <h1>{{ user.username }}</h1>
        {%- if user.name or user.location -%}
            <p>
                {%- if user.realname -%}{{ user.realname }}{%- endif -%}
                {%- if user.location -%}
                    From <a href="http://map.baidu.com/?newmap=1&ie=utf-8&s=s%26wd%3D{{ user.location }}">{{ user.location }}</a>
                {%- endif -%}
            </p>
        {%- endif -%}
        {%- if current_user.is_administrator -%}
            <p><a href="mailto:{{ user.email }}">{{ user.email }}</a></p>
        {%- endif -%}
        {%- if user.about_me -%}
            <p>{{ user.about_me }}</p>
        {%- endif -%}
        <p>
            register time: {{ moment(user.register_date).format('L') }}
            <br />
            last access time: {{ moment(user.last_access_date).fromNow() }}
        </p>
    </div>
{%- endblock -%}

说明:realname和location字段在同一个<p>元素中渲染,只有至少定义这两个字段中的一个时<p>才会被创建,location字段被渲染成百度地图的查询链接,判断current_user是否是管理员,如果是则显示用户电子邮箱,并渲染成mailto链接

FlaskWeb/app/templates/base.html

{%- extends 'bootstrap/base.html' -%}
{%- import 'bootstrap/wtf.html' as wtf -%}
{%- import 'bootstrap/utils.html' as utils -%}
{%- import 'bootstrap/fixes.html' as fixes -%}
{%- block html_attribs -%}
    {{ super() }}
    lang="zh-cn"
{%- endblock -%}
{%- block meta -%}
    {{ super() }}
    charset="utf-8"
{%- endblock -%}
{%- block title -%}
    {{ title|default('Flasky', true) }}
{%- endblock -%}
{%- block head -%}
    {{ super() }}
    {{ fixes.ie8() }}
    <link rel="shortcut icon"
          type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
    <link rel="icon"
          type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
{%- endblock -%}
{%- block navbar -%}
    <div class="navbar navbar-inverse" role="navigation">
        <div class="container">
            <div class="navbar-header">
                {# 说明: 先不支持响应式 #}
                <a class="navbar-brand" href="/">Flasky</a>
            </div>
            <div>
                <ul class="nav navbar-nav navbar-left">
                    <li class="active"><a href="/">Home</a></li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    {%- if current_user.is_authenticated -%}
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ current_user.username }}<b class="caret"></b> </a>
                            <ul class="dropdown-menu">
                                <li><a href="{{ url_for('main.user', username=current_user.username) }}">个人信息</a></li>
                                <li><a href="{{ url_for('auth.logout') }}">退出登出</a></li>
                            </ul>
                        </li>
                    {%- else -%}
                        <li><a href="{{ url_for('auth.login') }}">登录</a></li>
                        <li><a href="{{ url_for('auth.register') }}">注册</a></li>
                    {%- endif -%}
                </ul>
            </div>
        </div>
    </div>
{%- endblock -%}
{%- block content -%}
    <div class="container">
        {%- block page_content -%}{%- endblock -%}
    </div>
{%- endblock -%}
{%- block styles -%}
    {{ super() }}
{%- endblock -%}
{%- block scripts -%}
    <script type="text/javascript"
            src="{{ url_for('main.static',filename='js/fixes/respond.min.js') }}"></script>
    <script type="text/javascript"
            src="{{ url_for('main.static',filename='js/fixes/html5shiv.min.js') }}"></script>
    {{ super() }}
    {{ moment.include_moment(local_js=url_for('main.static', filename='js/moment-with-locales.min.js')) }}
{%- endblock -%}

说明:大多数用户都希望能很轻松的访问自己的资料页面,所以我们修改下base.html基模版中的导航页面,使用下拉式导航,在下拉菜单中添加一个链接,链接到个人信息页面展示

转载于:https://my.oschina.net/pydevops/blog/702401

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值