一、个人学期总结
在经过一个学期的管理信息系统的学习我接触到了python这门全新的语言。相比较于以前学习的java语言来说,python的学习让我充满兴趣和学习欲望。首先python语言简单,很容易入手。功能实现所需要的代码非常精简。不用花费时间去打很多代码。实现出的功能让我有成就感。
在管理信息系统的前半学期时间学习了许多python的基础功能。了解了许多第三方库,像是datebase、turtle、jieba等。展现出画图、时间、词频统计等等。后半学期学习了论坛的网页制作,首先学习了前端页面css效果的显示让页面显示的美观大方。还学习了网页继承,让我们可以继承父模板减少了工作量。
后期连接数据库进行数据的调用传输。学习了注册、登录、发布问答、个人中心、详情页、密码保护、模型分离等功能。其中利用后台主py文件进行功能实现,再到页面上进行连接赋值完成整个论坛网页的制作。python的功能非常庞大,具有大量的第三方库。被称为胶水语言,不仅可以用来制作网页,还可以用来做数据挖掘。前景十分好。在最后感谢杜云梅老师本学期的教导,让我很好的进入到python这门课程,让我学习到了很多东西。在今后的学习生活中我也会继续学习python,为今后的生活工作打下基础。
二、Python+Flask+MysqL的web建设技术过程总结
1.web建设的使用工具
工具:pycharm+mysql+Python+Navicat for mysql
2.基础界面展示
①导航栏
②首页
③登录界面and注册界面
④发布问答and问答详情页
⑥个人中心页面
3.第三方库导入与数据库的连接
from flask import Flask from flask import render_template, request, redirect, url_for, session import config, os from functools import wraps from flask_sqlalchemy import SQLAlchemy from datetime import datetime from sqlalchemy import or_,and_ from werkzeug.security import generate_password_hash,check_password_hash
app = Flask(__name__) app.config.from_object(config) db = SQLAlchemy(app) SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:19940224@localhost:3306/mis_db?charset=utf8' SQLALCHEMY_TRACK_MODIFICATIONS = False
4、数据库表的建立与增删查改功能
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(200), nullable=False) nickname = db.Column(db.String(20), nullable=True) @property def password(self): #外部使用 return self._password @password.setter def password(self,row_password): self._password=generate_password_hash(row_password) def check_password(self,row_password): result=check_password_hash(self._password,row_password) return result class Ques(db.Model): __tablename__ = 'question' id = db.Column(db.Integer, primary_key=True, autoincrement=True) author_id = db.Column(db.Integer, db.ForeignKey('user.id')) author = db.relationship('User', backref=db.backref('question')) title = db.Column(db.String(20), nullable=False) detail = db.Column(db.Text, nullable=False) creat_time = db.Column(db.DateTime, default=datetime.now) 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')) creat_time = db.Column(db.DateTime, default=datetime.now) detail = db.Column(db.Text, nullable=False) question = db.relationship('Ques', backref=db.backref('comment', order_by=creat_time.desc)) author = db.relationship('User', backref=db.backref('comment')) class Dianzan(db.Model): __tablename__ = 'dianzan' 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')) question = db.relationship('Ques', backref=db.backref('dianzan')) author = db.relationship('User', backref=db.backref('dianzan')) db.create_all()
# 增加 # user=User(username='yujiujiu2',password='11111',nickname='123456') # db.session.add(user) # db.session.commit() # 查询 # user=User.query.filter(User.username =='yujiujiu2').first() # print(user.username,user.password,user.nickname) # 删除 # user=User.query.filter(User.username =='vixx').first() # db.session.delete(user) # db.session.commit() # 修改 # user=User.query.filter(User.username =='vixx').first() # user.password='123456789' # db.session.commit()
5、登录与注册功能的实现
主py文件(后台功能的实现):
# 注册 @app.route('/regist', methods=['GET', 'POST']) def regist(): if request.method == 'GET': return render_template('regist.html') else: username = request.form.get('username') password = request.form.get('password') user = User.query.filter(User.username == username).first() # 判断用户名是否存在 if user: return u'账号已存在' else: user = User(username=username, password=password) db.session.add(user) db.session.commit() return redirect(url_for('login')) # 登录 @app.route('/login/', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') else: username = request.form.get('username') password = request.form.get('password') user = User.query.filter(User.username == username).first() # 判断用户名是否存在 if user: if user.check_password(password): session['user'] = username session['userid']=user.id session.permanent = True return redirect(url_for('index')) else: return u'密码错误' else: return u'账号不存在'
页面获取数据
{#登录#}
{#注册#}
6、问答详情页与发布评论
主py文件实现功能
# 问答详情页 @app.route('/detail/', methods=['GET', 'POST']) def detail(question_id): quest = Ques.query.filter(Ques.id == question_id).first() comments = Comment.query.filter(Comment.question_id == question_id).all() dzyes = Dianzan.query.filter( # dzyes用在用户详情页判断是否已点赞的按钮 and_( Dianzan.author_id == session.get('userid'), Dianzan.question_id == question_id ) ).first() return render_template('detail.html', quest=quest,comments=comments,dzyes=dzyes)
# 评论 @app.route('/comment',methods=['POST']) @loginFirst def comment(): comment =request.form.get('new_comment') question_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=question_id,detail=comment) db.session.add(comm) db.session.commit()
页面显示传输数据
{% extends 'index.html' %} {% block registertitle %} 内容{% endblock %} {% block registerhead %} {% endblock %}{% block body %} #}{{ quest.title }}
{# 作者:{{ quest.author.username }} 时间:{{ quest.creat_time }}#} 作者:{{ quest.author.username }} 发布时间:{{ quest.creat_time }}{#{{ quest.detail }} 点赞:{{ quest.dianzan|length }}#} {# 点赞#} {#评论:({{ quest.comment|length }})
{% for foo in comments %}{% endfor %}发布评论