1.个人学期总结
本人在这学期中学习了管理信息系统这门科目,这门科目主要讲解了基于Python的Flask框架web建设项目。Python,是一种面向对象的解释型计算机程序语言,由荷兰人于1989年发明,第一个公开发行版发行于1991年。Python语言具有很多优点,首先,Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。再者,Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译,其中很重要的一项就是Python的缩进规则。
在前期Python的基础课程中学习到了turtle库的基础练习、字符串的基本操作、凯撒密码 、GDP格式化输出、99乘法表、中英文词频统计、和datetime处理日期和时间等等基础学习。
中期,开始学习用html元素制作web网页,观察常用网页的HTML元素,在实际的应用场景中,用已学的标签模仿制作。制作自己的导航条,认识css的盒子模型,用div等元素布局形成html文件。完成了登录与注册页面的html+css+js, 夜间模式的开启和关闭,制作网站网页共有元素的父模板html,包括顶部导航,中间区块划分,底部导航,底部说明等。汇总相关的样式形成独立的css文件,使用 js代码形成独立的js文件,形成完整的base.html+css+js。
后期,进行flask项目,理解flask项目主程序,使用装饰器,设置路径与函数之间的关系。加载静态文件,父模板的继承和扩展。连接mysql数据库,创建用户模型,通过用户模型,对数据库进行增删改查,完成登录、注册、发布评论等功能,继续对我们的项目进行完善。
完成以上步骤之后,一个网页就差不多完成了。但完成的网页是一个很简单的,所以希望在以后能制作出一个更完美的网页。
2.总结Python+Flask+MysqL的web建设技术过程,标准如下:
即是对自己所学知识的梳理
也可作为初学入门者的简单教程
也可作为自己以后复习的向导
也是一种向外展示能力的途径
Python+Flask+MysqL的web建设技术过程:
(1)注册页面的实现:
代码:
{% extends 'base.html' %}
{% block title %}注册{% endblock %}
{% block head %}
{% endblock %}
{% block main %}
注册
昵称:
密码:
再输密码:
注册
(2)登陆页面:
代码:
{% extends 'base.html' %}
{% block title %}登录{% endblock %}
{% block head %}
{% endblock %}
{% block main %}登录
密码:
登录
取消
(3)首页页面:
代码:
{% extends 'base.html' %}
{% block title %}
首页
{% endblock %}
{% block head %}
{% endblock %}
{% block main %}
- {% for foo in questions %}
{{ foo.title }}
{{ foo.detail }}
{{ foo.creat_time}}
{% endfor %}
评论:{{ foo.comments|length }}
浩瀚星空
(4)发布问答
代码:
{% extends 'base.html' %}
{% block title %}问答{% endblock %}
{% block head %}{% endblock %}
{% block main %}
Question
Detail
check me
{% endblock %}
(5)个人详情页面:
代码:
{% extends 'userbase.html' %}
{% block title %}
个人信息页
{% endblock %}
{% block head %}{% endblock%}
{% block user %}
全部问答
{% for foo in user.questions %}{{ foo.title }}
{{ foo.detail }}
{{ foo.creat_time}}
{% endfor %}
全部评论
{% for foo in user.comments %}{{ foo.title }}
{{ foo.detail }}
{{ foo.creat_time}}
{% endfor %}
{{ username }}个人信息
用户:{{ user.username }}
编号:{{ user.id }}
昵称:{{ user.nickname }}
文章篇数:{{ user.questions|length }}
(6)个人用户父类模板代码:
{% extends 'base.html' %}
{% block title %}
个人中心
{% endblock %}
{% block head %}{#
{#.nav_ul li#}
{#list-style:none;#}
{#float: left;#}
{#margin: 10px;#}
{##}
{##}
{% endblock %}
{% block main %}
{% block user %}{% endblock %}
{% endblock %}
(7)父类模板代码:
{% block title %}首页{% endblock %}{% block head %}{% endblock %}
{##}(8)config.py代码:
importos
SECRET_KEY= os.urandom(24)
SQLALCHEMY_DATABASE_URI= 'mysql+pymysql://root:123456@127.0.0.1:3306/misdb?charset=utf8'SQLALCHEMY_TRACK_MODIFICATIONS= False
(9)tianwen.py代码:
from flask importFlaskfrom flask_sqlalchemy importSQLAlchemyimportconfigfrom flask importFlask, render_template, request, redirect, url_for,sessionfrom functools importwrapsfrom datetime importdatetimefrom sqlalchemy importor_, and_
app= Flask(__name__)
app.config.from_object(config)
db=SQLAlchemy(app)#登录的数据库
classUser(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))
db.create_all()#问题页的数据库
classQuestion(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)
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('questions'))
db.create_all()classComment(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()#user=User(username='mis1',password='11111')#db.session.add(user)#db.session.commit()
@app.route('/')defbase():return render_template('base.html')#调用数据库把用户评论放在首页
@app.route('/index/')defindex():
context={'questions':Question.query.order_by('-creat_time').all()
}return render_template('index.html',**context)
@app.route('/login/',methods=['GET','POST'])deflogin():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()ifuser:if user.password==passw:
session['user'] =usern
session['userid'] =user.id
session.permanent=Truereturn redirect(url_for('base'))else:return u'password error'
else:return u'password is not existed'@app.route('/regist/',methods=['GET','POST'])defregist():if request.method=='GET':return render_template('regist.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()ifuser:return u'username existed'
else:
user=User (username=usern,password=passw,nickname=nickn)
db.session.add(user)
db.session.commit()return redirect(url_for('login'))defloginFirst(func):
@wraps(func)def wrapper(*args, **kwargs):if session.get('user'):return func(*args, **kwargs)else:return redirect(url_for('login'))returnwrapper
@app.route('/question/',methods=['GET','POST'])
@loginFirst#发布前登录,python装饰器
defquestion():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
question= Question(title=title, detail=detail, author_id=author_id)
db.session.add(question)
db.session.commit()return redirect(url_for('index'))#评论页的详细页
@app.route('/detail/')defdetail(question_id):
quest= Question.query.filter(Question.id ==question_id).first()return render_template('detail.html', ques=quest)#评论功能
@app.route('/comment/',methods=['POST'])
@loginFirst#发布前登录,python装饰器
defcomment():
detail= request.form.get('fabu')
author_id= User.query.filter(User.username == session.get('user')).first().id
quest_id=request.form.get('question_id')
pinglun= Comment(question_id=quest_id,detail=detail, author_id=author_id)
db.session.add(pinglun)
db.session.commit()return redirect(url_for('detail',question_id=quest_id))#个人信息页
@app.route('/usercenter//')
@loginFirst#发布前登录,python装饰器
defusercenter(user_id,tag):
user=User.query.filter(User.id==user_id).first()
context={'user':user
}if tag=='1':return render_template('user1.html',**context)elif tag=='2':return render_template('user2.html',**context)else:return render_template('user3.html',**context)
@app.context_processordefmycontext():
usern=session.get('user')ifusern:return{'username':usern}else:return{}
@app.route('/search/')defsearch():
qu=request.args.get('q')
ques=Question.query.filter(or_(Question.title.contains(qu),Question.detail.contains(qu))).order_by('-creat_time')return render_template('index.html', questions=ques)
@app.route('/logout/')deflogout():
session.clear()return redirect(url_for('index'))if __name__ == '__main__':
app.run(debug=True)
以上就是Python+Flask+MysqL的web建设技术过程,读者可以根据自己的需求修改。