当前位置: 首页 > news >正文

个人中心标签页导航

个人中心标签页导航
    1. 新页面userbase.html,用<ul ><li role="presentation"> 实现标签页导航。
      <ul class="nav nav-tabs">
        <li role="presentation"><a href="#">Home</a></li>
        <li role="presentation"><a href="#">Profile</a></li>
        <li role="presentation"><a href="#">Messages</a></li>
      </ul>

    2. 让userbase.html继承base.html。
      重写title,head,main块.
      将上述<ul>的样式放在head块,<ul>放在main块中.
      定义新的块user。

    3. 让上次作业完成的个人中心页面,继承userbase.html,原个人中心就自动有了标签页导航。

    4. 制作个人中心的三个子页面,重写userbase.html中定义的user块,分别用于显示问答、评论、个人信息。

    5. 思考 如何实现点标签页导航到达不同的个人中心子页面。   
      from flask import Flask,render_template,request,redirect,url_for,session
      from flask_sqlalchemy import SQLAlchemy
      from functools import wraps
      from datetime import datetime
      import config
      app = Flask(__name__)
      app.config.from_object(config)
      db=SQLAlchemy(app)
      class User(db.Model):
          __tablename__ = 'user'
          id = db.Column(db.Integer,primary_key=True,autoincrement=True)
          username = db.Column(db.String(20),nullable=False)
          password = db.Column(db.String(20),nullable=False)
          nickname = db.Column(db.String(50))
      
      class Question(db.Model):
          __tablename__ = 'question'
          id = db.Column(db.Integer,primary_key=True,autoincrement=True)
          title = db.Column(db.String(100),nullable=False)
          detail = db.Column(db.Text,nullable=False)
          c520555reat_time = db.Column(db.DateTime,default=datetime.now)
          author_id = db.Column(db.Integer,db.ForeignKey('user.id'))
          author = db.relationship('User',backref=db.backref('question'))
      
      class Comment(db.Model):
          __tablename__='comment'
          id = db.Column(db.Integer, primary_key=True, autoincrement=True)
          author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
          question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
          detail = db.Column(db.Text, nullable=False)
          creat_time = db.Column(db.DateTime, default=datetime.now)
          question = db.relationship('Question', backref=db.backref('comments',order_by=creat_time.desc))
          author = db.relationship('User', backref=db.backref('comments'))
      
      db.create_all()
      
      
      @app.route('/')
      def shouye():
          context = {
              'questions': Question.query.all()
          }
          return render_template('shouye.html', **context)
      
      @app.route('/denglu/',methods=['GET','POST'])
      def gg():
          if request.method == 'GET':
              return render_template('denglu.html') #跳转登录
          else:
              usern = request.form.get('username')
              passw = request.form.get('password')
              user = User.query.filter(User.username == usern).first()
              if user:
                  if user.password == passw:
                      session['user'] = usern
                      session.parmanent = True
                      return redirect(url_for('shouye'))
                  else:
                      return u'password error'
              else:
                  return u'username is not existed'
      
      @app.route('/zhuche/', methods=['GET','POST'])
      def login ():
          if request.method =='GET':
              return render_template('zhuce.html')#跳转注册
          else:
              usern = request.form.get('username')
              passw = request.form.get('password')
              nickn = request.form.get('nickname')
              user = User.query.filter(User.username == usern).first()
              if user:
                  return u'username existed'
              else:
                  user1 = User(username = usern,password = passw,nickname=nickn)
                  db.session.add(user1)#数据库操作
                  db.session.commit()
                  return redirect(url_for('gg'))
      
      @app.route('/tupian/')
      def hh():
          return render_template('tupian.html') #跳转图片库
      
      def loginFirst(func):
          @wraps(func)
          def wrapper (*args,**kwargs):
              if session.get('user'):
                  return  func(*args,**kwargs)
              else:
                  return redirect(url_for('gg'))
          return wrapper
      
      @app.route('/xiangqing/<question_id>')
      def xiangqing(question_id):
          quest = Question.query.filter(Question.id == question_id).first()
          return render_template('xiangqing.html',ques = quest)
      
      @app.route('/comment/',methods=['POST'])
      @loginFirst
      def comment():
          comment =request.form.get('new_comment')
          ques_id =request.form.get('question_id')
          auth_id =User.query.filter(User.username == session.get('user')).first().id
          comm = Comment(author_id=auth_id,question_id=ques_id,detail=comment)
          db.session.add(comm)
          db.session.commit()
          return redirect(url_for('xiangqing',question_id=ques_id))
      
      @app.route('/fabu/',methods=['GET','POST'])
      @loginFirst
      def fabu():
          if request.method == 'GET':
              return render_template('fabu.html')
          else:
              title = request.form.get('title')
              detail = request.form.get('detail')
              author_id = User.query.filter(User.username == session.get('user')).first().id
              question = Question(title=title, detail=detail, author_id=author_id)
              db.session.add(question)
              db.session.commit()
          return redirect(url_for('shouye')) # 跳转发布
      
      @app.context_processor
      def context():
          usern = session.get('user')
          if usern:
              return {'username': usern }
          else:
              return {}
      
      @app.route('/logout/')
      def logout():
          session.clear()
          return redirect(url_for('shouye'))
      
      @app.route('/usercenter/<user_id>')
      @loginFirst
      def usercenter(user_id):
          user = User.query.filter(User.id == user_id).first()
          context = {
              'user': user
          }
          return render_template('geren.html',**context)
      
      if __name__ == '__main__':
          app.run(debug=True)
      {% extends 'base.html' %}
      
      {% block userbasetitle %}个人中心2{% endblock %}
      
      {% block userbasehead %}
              <style>
                          nav_ul li{
                              list-style: none;
                              float: left;
                              margin: 10px;
                          }
      
              </style>
      {% endblock %}
      
      {% block userbasebody %}
          <ul class="nav_ul">
              <li role="presentation>"><a href="#">个人资料</a> </li>
              <li role="presentation>"><a href="#">全部问答</a> </li>
              <li role="presentation>"><a href="#">全部评论</a> </li>
          </ul>
      
      
          {% block user %}
          {% endblock %}
      {% endblock %}
      {% extends 'userbase.html' %}
      
      {% block user %}
          <div class="card" style="width:50rem; margin:0 auto">
              <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span>{{ username }}<br>
                  <small>个人信息<span class="badge"></span></small>
              </h3>
              <ul class="list-group" style="margin: 10px">
                      <li class="list-group-item">用户:{{ user.username }}</li>
                      <li class="list-group-item">编号:{{ user.id }}</li>
                      <li class="list-group-item">昵称:{{ user.nickname }}</li>
              </ul>
          </div>
          
      {% endblock %}
      {% extends 'userbase.html' %}
      
      {% block user %}
           <div class="card" style="width:50rem; margin:10cm auto">
          <ul class="list-group"style="height: 50rem">
              {% for foo in user.comments %}
                  <li class="list-group-item">
                      <span class="glyphicon" glyphicon-leaf aria-hidden="true"></span>
                      <a href="{{ url_for('usercenter',user_id = foo.author_id) }}">用户名:{{ foo.author.username }}</a>
                      <br>
                      <a href="{{ url_for('xiangqing',question_id = foo.id) }}">标题:{{ foo.title }}</a>
                      <span class="badge">{{ foo.creat_time }}</span>
                      <br>
                      <p class="neirong">内容:{{ foo.detail }}</p>
                  </li>
              {% endfor %}
               </ul>
           </div>
          
      {% endblock %}
      {% extends 'userbase.html' %}
      
      {% block user %}
        <div class="card" style="width:50rem; margin:10cm auto">
              <h3><span class="glyphicon glyphicon-user" aria-hidden="true"></span>{{ username }}<br>
                  <small>个人信息<span class="badge"></span></small>
              </h3>
              <ul class="list-group" style="margin: 10px">
                      <li class="list-group-item">用户:{{ user.username }}</li>
                      <li class="list-group-item">编号:{{ user.id }}</li>
                      <li class="list-group-item">昵称:{{ user.nickname }}</li>
              </ul>
          </div>
      
      {% endblock %}

       

posted on 2017-12-15 22:16 068冯斐然 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ffr0068/p/8045072.html

相关文章:

  • 将数据库中的数据转换成Json
  • java中的Serializable接口的作用
  • vue双向数据绑定
  • jQuery HTML
  • KMP,C语言自带的快排
  • hibernate课程 初探单表映射1-5 hibernate第一个demo
  • 凡事预则立-于Beta冲刺前
  • spring mvc xml简易配置
  • 3.C#知识点:is和as
  • springboot(十二):springboot如何测试打包部署
  • 两队列模拟一个栈,python实现
  • Lambda拉姆达表达式
  • 大型EMR电子病历源码三甲医院医疗信息管理系统软件网络版
  • 迭代器、 生成器、 面向过程编程
  • java-StringBuffer和String的相互转换
  • hexo+github搭建个人博客
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • AWS实战 - 利用IAM对S3做访问控制
  • canvas 五子棋游戏
  • GitUp, 你不可错过的秀外慧中的git工具
  • Js基础——数据类型之Null和Undefined
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • ViewService——一种保证客户端与服务端同步的方法
  • Webpack 4x 之路 ( 四 )
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 排序算法之--选择排序
  • 区块链将重新定义世界
  • 微服务入门【系列视频课程】
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一个JAVA程序员成长之路分享
  •  一套莫尔斯电报听写、翻译系统
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​TypeScript都不会用,也敢说会前端?
  • #每天一道面试题# 什么是MySQL的回表查询
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (03)光刻——半导体电路的绘制
  • (function(){})()的分步解析
  • (TOJ2804)Even? Odd?
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (黑马C++)L06 重载与继承
  • (状压dp)uva 10817 Headmaster's Headache
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net refrector