制作首页的显示列表
py代码
1 from flask import Flask, render_template, request, redirect, url_for, session 2 from flask_sqlalchemy import SQLAlchemy 3 import config 4 from datetime import datetime 5 from functools import wraps 6 7 8 9 10 app = Flask(__name__) 11 app.config.from_object(config) 12 db = SQLAlchemy(app) 13 14 15 class User(db.Model): 16 __tablename__ = 'user' 17 id = db.Column(db.Integer, primary_key=True, autoincrement=True) 18 username = db.Column(db.String(20), nullable=False) 19 password = db.Column(db.String(20), nullable=False) 20 nickname = db.Column(db.String(20), nullable=True) 21 22 23 class Wenda(db.Model): 24 __tablename__ = 'wenda' 25 id = db.Column(db.Integer, primary_key=True, autoincrement=True) 26 title = db.Column(db.String(100), nullable=False) 27 detail = db.Column(db.Text, nullable=False) 28 creat_time = db.Column(db.DateTime, default=datetime.now) 29 author_id = db.Column(db.Integer, db.ForeignKey('user.id')) 30 author = db.relationship('User', backref=db.backref('wenda')) 31 32 33 34 # db.create_all() #是否链接成功 35 36 37 # 数据添加 38 # user=User(username='ma',password='gg') 39 # db.session.add(user) 40 # db.session.commit() 41 # 42 # 43 # 数据更新 44 # 45 # user = User.query.filter(User.username=='hh').first() 46 # user.password='gg' 47 # db.session.commit() 48 # 49 # 50 # 数据查询 51 # user = User.query.filter(User.username=='ma').first() 52 # print(user.username,user.password) 53 # 54 # 数据删除 55 # user = User.query.filter(User.username=='ma').first() 56 # db.session.delete(user) 57 # db.session.commit() 58 59 60 # session会话连接 61 # filter()过滤器 62 # route制定路径和函数之间的关系 63 # def定义一个变量 64 65 @app.route('/') 66 def moban(): 67 context = { 68 'user':'hhhhhh' 69 70 } 71 return render_template('moban.html',**context) 72 73 74 @app.route('/login/', methods=['GET', 'POST']) # 跳转登陆,methods定义它有两种请求方式 75 def login(): 76 if request.method == 'GET': 77 return render_template('login.html') 78 else: 79 username = request.form.get('user') 80 password = request.form.get('psw') 81 user = User.query.filter(User.username == username).first() # 判断用户名是否存在 82 if user: 83 if user.password == password: 84 session['user']=username 85 session.permanent = True 86 return redirect(url_for('moban')) 87 else: 88 return '用户名不存在' 89 90 91 @app.context_processor 92 def mycontext(): 93 username=session.get('user') 94 if username: 95 return {'username':username} 96 else: 97 return {} 98 99 def loginFirst(func): #参数是函数 100 @wraps(func) 101 def wrapper(*args, ** kwargs): #定义个函数将其返回 102 if session.get('user'): 103 return func(*args, ** kwargs) 104 else: 105 return redirect(url_for('login')) 106 return wrapper #返回一个函数 107 108 @app.route('/register/', methods=['GET', 'POST']) # 跳转注册,methods定义它有两种请求方式 109 def register(): 110 if request.method == 'GET': 111 return render_template('register.html') 112 else: 113 114 username = request.form.get('user') 115 password = request.form.get('psw') 116 nickname = request.form.get('nickname') 117 user = User.query.filter(User.username == username).first() # 判断用户名是否存在 118 if user: 119 return u'该用户已存在' 120 else: 121 user = User(username=username, password=password, nickname=nickname) 122 db.session.add(user) 123 db.session.commit() 124 return redirect(url_for('login')) 125 126 @app.route('/logout/') 127 def logout(): 128 session.clear() 129 return render_template('moban.html') 130 131 @app.route('/wenda/',methods=['GET', 'POST']) # 跳转注册,methods定义它有两种请求方式 132 @loginFirst 133 def wenda(): 134 if request.method == 'GET': 135 return render_template('wenda.html') 136 else: 137 title = request.form.get('title') 138 detail = request.form.get('detail') 139 author_id = User.query.filter(User.username == session.get('user')).first().id 140 wenda = Wenda(title = title,detail =detail,author_id = author_id) 141 db.session.add(wenda) 142 db.session.commit() 143 return redirect(url_for('moban')) 144 145 146 if __name__ == '__main__': 147 app.run(debug=True)
首页代码
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title> 6 首页 7 {% block logintitle %}{% endblock %} 8 {% block registertitle %}{% endblock %} 9 {% block wendatitle %}{% endblock %} 10 </title> 11 {% block loginhead %}{% endblock %} 12 {% block registerhead %}{% endblock %} 13 {% block wendahead %}{% endblock %} 14 15 </head> 16 <body id="myBody" style="background-color: lightcyan"> 17 <nav> 18 <img src="{{ url_for('static',filename='image/gzsxy.png') }}" width="2200px" > 19 <br> 20 <script> 21 document.write(Date()) 22 </script> 23 <br> 24 <a href="{{ url_for('moban') }}">首页</a> 25 {% if username %} 26 <a href="#">{{ username }}</a> 27 <a href="{{ url_for('logout') }}">注销</a> 28 {% else %} 29 <a href="{{ url_for('login') }}" >登录</a> 30 <a href="{{ url_for('register') }}">注册</a> 31 {% endif %} 32 <a href="{{ url_for('wenda') }}">问答</a> 33 <input type="text" placeholder="请输入关键字"> 34 <button type="submit">搜索</button> 35 </nav> 36 <p>欢迎登陆{{ username }}</p> 37 <div class="list_container"> 38 <ul class="news-list"> 39 <li class="list-group-item"> 40 <span class="glyphicon glyphicon-leaf" aria-hidden="true"></span> 41 <a href="#">{{ user }}</a> 42 <br> 43 <a href="#">标题</a> 44 <br> 45 <span class="badge">发布时间</span> 46 <p style="background-color: aqua">内容</p> 47 </li> 48 49 </ul> 50 51 </div> 52 {% block loginbody %}{% endblock %} 53 {% block registerbody %}{% endblock %} 54 {% block wendabody %}{% endblock %} 55 </body> 56 </html>