zoukankan      html  css  js  c++  java
  • 从首页问答标题到问答详情页

      1. 主PY文件写视图函数,带id参数。 
        @app.route('/detail/<question_id>')
        def detail(question_id):
            quest = 
            return render_template('detail.html', ques = quest) 
      2. 首页标题的标签做带参数的链接。
              {{ url_for('detail',question_id = foo.id) }}
        from flask import Flask, render_template,request,redirect,url_for,session
        from flask_sqlalchemy import SQLAlchemy
        import config
        from functools import wraps
        from datetime import datetime
        
        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(100), nullable=False)
            password= db.Column(db.String(500), nullable=False)
        
        
        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)
            create_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'))
            create_time = db.Column(db.DateTime, default=datetime.now)
            detail = db.Column(db.Text, nullable=False)
            question = db.relationship('Question', backref=db.backref('comments'))
            author = db.relationship('User', backref=db.backref('comments'))
        
        db.create_all()
        
        
        @app.route('/')
        def hello_world():
            return render_template('base.html')
        @app.route('/zhuce/',methods=['GET','POST'])
        
        def zhuce():
            if request.method == 'GET':
                return render_template('zc.html')
            else:
                username = request.form.get('username')  # 获取form中的数据
                password = request.form.get('password')  # 获取form中的数据
                # email = request.form.get('email')  # 获取form中的数据
                user = User.query.filter(User.username ==username).first()
                if user:
                    return'用户已存在'
                else:
                    user = User(username = username,password=password)
                    db.session.add(user)
                    db.session.commit()
                    return redirect(url_for('denglu'))
        
        @app.route('/denglu/',methods=['GET','POST'])
        def denglu():
            if request.method=='GET':
                return render_template('dl.html')
            else:
                username = request.form.get('username')
                password = request.form.get('password')
        
                user=User.query.filter(User.username==username).first()
                #判断用户名是否存在
                if user:
                    session['user']=username
                    session.permanent=True
                    if user.password==password:
                        return redirect(url_for('shouye'))
                    else:
                        return '密码错误'
                else:
                    return '此用户不存在'
        
        @app.context_processor
        def mycontext():
            usern=session.get('user')
            if usern:
                return {'username':usern}
            else:
                return{}
        
        @app.route('/logout/')
        def logout():
            session.clear();
            return redirect(url_for('shouye'))
        
        def log(func): #参数是函数
            @wraps(func)
            def wrappers(*args,** kwargs): #定义个函数将其返回
                if session.get('user'):
                    return func(*args,**kwargs)
                else:
                    return redirect(url_for('denglu'))
            return wrappers #返回一个函数
        
        
        @app.route('/shouye/')
        def shouye():
            context = {
                'questions':Question.query.order_by('create_time').all()
            }
            return render_template('hh.html',**context)
        
        @app.route('/wenda/',methods=['GET','POST'])
        @log
        def wenda():
            if request.method=='GET':
                return render_template('wd.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.route('/detail/<question_id>')
        def detail(question_id):
            quest=Question.query.filter(Question.id==question_id).first()
            return render_template('detail.html',ques=quest)
        
        if __name__ == '__main__':
            app.run(debug=True)
      3. 在详情页将数据的显示在恰当的位置。 
        {{ ques.title}}
        {{ ques.id  }}{{  ques.creat_time }}
        {{ ques.author.username }} 
        {{ ques.detail }}
      4. 建立评论的对象关系映射:

        class Comment(db.Model):
            __tablename__='comment'

      5.  尝试实现发布评论。

        {% extends 'base.html' %}
        {% block title %}
            问答详情
        {% endblock %}
        {% block main %}
            <div class="box">
                <h3 href="#" >{{ ques.title }}</h3><small> {{ ques.author.username }}<span class="badge" style="margin-left: 75%">{{ ques.create_time }}</span></small>
                <hr>
                <p>{{ ques.detail }}</p>
                <hr>
                <form>
                    <div><textarea class="form-control" id="comment" rows="3" style="margin-left: 1%" name="comment" placeholder="write your comment"></textarea><br></div>
                    <button type="submit" >发送</button>
                </form>
              <h4>评论:</h4>
                 <ul class="list-group">
                        <li class="list-group-item">
                            <img style=" 30px" src="{{ url_for('static',filename='css/touxiang.jpg') }}" alt="64">
                            <a href="#"></a><br>
                            <p style="align-content: center"></p>
                            <span class="badge" style="margin-left: 60%"></span>
                            <p style="margin-left: 25%"></p><br>
                        </li>
                </ul>
        
            </div>
        {% endblock %}
  • 相关阅读:
    基于 Docker 的现代软件供应链
    Java 性能调优指南之 Java 集合概览
    Docker 网络基础介绍
    选择 Java 编写 iOS 与 安卓 App的八大理由
    使用Babel和ES7创建JavaScript模块
    Java 8方法引用使用指南
    软件可扩展性:来自星巴克的经验
    Docker 监控之 SaaS 解决方案
    如何高效的阅读uni-app框架?(建议收藏)
    如何高效的阅读uni-app框架?(建议收藏)
  • 原文地址:https://www.cnblogs.com/00js/p/7998415.html
Copyright © 2011-2022 走看看