from flask import Flask,render_template,request,redirect,url_for,session from flask_sqlalchemy import SQLAlchemy from datetime import datetime from functools import wraps 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(20)) class Question(db.Model): __table__name = '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) creat_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')) #db.create_all() @app.route('/') def index(): return render_template('index.html') @app.route('/login/',methods=['GET','POST']) def login(): if request.method == 'GET': return render_template('login.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.permanent = True return redirect(url_for('index')) else: return 'password error' else: return 'username is not existed.' @app.route('/regist/',methods=['GET','POST']) def regist(): if request.method == 'GET': return render_template('regist.html') else: usern = request.form.get('username') nickn = request.form.get('nickname') passw = request.form.get('password') user = User.query.filter(User.username == usern).first() if user: return 'username existed.' else: user1 = User(username=usern,password=passw,nickname=nickn) db.session.add(user1) db.session.commit() return redirect(url_for('login')) @app.route('/logout') def logout(): session.clear() return redirect(url_for('index')) @app.context_processor def mycontext(): usern = session.get('user') if usern: return {'username': usern} else: return {} def loginFirst(func): @wraps(func) def wrapper(*args,**kwargs): if session.get('user'): return func(*args,**kwargs) else: return redirect(url_for('login')) return wrapper @app.route('/question/',methods=['GET','POST']) @loginFirst def question(): if request.method == 'GET': return render_template('question.html') else: title = request.form.get('title') detail = request.form.get('detail') author_id = User.query.filter(User.username == session.get('user')).first().id user = User.query.filter(User.username == session.get('user')).first() question = Question.query.filter(Question.title == title).first() if question: return 'question existed.' else: question = Question(title=title, detail=detail, author_id=author_id) question.author = user db.session.add(question) db.session.commit() return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True)
#base.htmlcss
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}Title</title> <link rel="stylesheet"type="text/css"href="{{ url_for('static',filename='css/base.css') }}"> <script src="{{ url_for('static',filename='js/base.js') }}"></script> <base target="_blank" /> {% block head %}{% endblock %} </head> <body background="http://p0.so.qhimgs1.com/t01d2e82c8c8f2be36c.jpg" id="myBody"> <nav class="nav"> <ul> <li><a href="{{ url_for('index') }}"><img src="../static/images/img1.png">首頁</a></li> <li><a href=""><img src="../static/images/img2.png">下載</a></li> <li><a href="{{ url_for('question') }}"><img src="../static/images/img5.png">發佈問答</a></li> <div> {% if username %} <li><a href="#"><img src="../static/images/img3.png">{{ username }}</a></li> <li><a href="{{ url_for('logout') }}"><img src="../static/images/img4.png">註銷</a></li> {% else %} <li><a href="{{ url_for('login') }}"><img src="../static/images/img3.png">登陸</a></li> <li><a href="{{ url_for('regist') }}"><img src="../static/images/img4.png">註冊</a></li> {% endif %} </div> <img class="on_off" id="on_off" onclick="mySwitch()" src="../static/images/pic_bulbon.gif" width="50px"> <button style="float: right;margin: 5px auto;border-radius: 5px;height: 26px" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span>搜索</button> <input style="float: right;margin: 5px auto;border-radius: 8px;width: 200px;height: 20px;" type="text"name="search" placeholder="輸入要搜索的內容"> </ul> </nav> <div id="bottom"> <a href="">關於咱們</a> <a href="">意見反饋</a> <a href="">安全保障</a> </div> <div class="copyright"> <p>Copyright © 2017. Created by <a href="#" target="_blank">suxihong</a></p> </div> {% block main %}{% endblock %} </body> </html>