期末作品检查

一、个人学期总结

    在经过一个学期的管理信息系统的学习我接触到了python这门全新的语言。相比较于以前学习的java语言来说,python的学习让我充满兴趣和学习欲望。首先python语言简单,很容易入手。功能实现所需要的代码非常精简。不用花费时间去打很多代码。实现出的功能让我有成就感。

  在管理信息系统的前半学期时间学习了许多python的基础功能。了解了许多第三方库,像是datebaseturtlejieba等。展现出画图、时间、词频统计等等。后半学期学习了论坛的网页制作,首先学习了前端页面css效果的显示让页面显示的美观大方。还学习了网页继承,让我们可以继承父模板减少了工作量。

    后期连接数据库进行数据的调用传输。学习了注册、登录、发布问答、个人中心、详情页、密码保护、模型分离等功能。其中利用后台主py文件进行功能实现,再到页面上进行连接赋值完成整个论坛网页的制作。python的功能非常庞大,具有大量的第三方库。被称为胶水语言,不仅可以用来制作网页,还可以用来做数据挖掘。前景十分好。在最后感谢杜云梅老师本学期的教导,让我很好的进入到python这门课程,让我学习到了很多东西。在今后的学习生活中我也会继续学习python,为今后的生活工作打下基础。

 

二、Python+Flask+MysqL的web建设技术过程总结

1.web建设的使用工具

工具:pycharm+mysql+Python+Navicat for mysql

2.基础界面展示

①导航栏

②首页

期末作品检查_第1张图片

③登录界面and注册界面

期末作品检查_第2张图片

期末作品检查_第3张图片

④发布问答and问答详情页

期末作品检查_第4张图片

期末作品检查_第5张图片

⑥个人中心页面

期末作品检查_第6张图片

期末作品检查_第7张图片

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'账号不存在'
复制代码

页面获取数据

复制代码
{#登录#}
            
username:

password:


复制代码
复制代码
{#注册#}
            
账号注册:
注册密码:
确认密码:


复制代码

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 }}
{% if dzyes %} {% else %} {% endif %}
点赞:{{ quest.dianzan|length }}
{#
#} {#
点赞
#} {#
#}

评论:({{ quest.comment|length }})

{% for foo in comments %}
{{ foo.author.username }}   时间:{{ foo.creat_time }}
  {{ foo.detail }}
{% endfor %}

发布评论

{% endblock %}
复制代码

7、个人中心

主py文件的功能实现

复制代码
@app.route('/usercenter//')
@loginFirst
def usercenter(user_id,tag):
    user=User.query.filter(User.id==user_id).first()
    context={
        'username_id': user.id,
        'username':user.username,
        'questions':user.question,
        'comments':user.comment
    }
    if tag == '1':
        return render_template('usercenter.html',**context)
    elif tag == '2':
        return render_template('all_question.html', **context)
    else:
        return render_template('all_comment.html', **context)
复制代码

父模板user

复制代码
{% extends"index.html" %}
{% block logintitle %}个人中心{% endblock %}
{% block loginhead %}
    

{% endblock %}
{% block body %}
    

{% block user %}{% endblock %}
{% endblock %}
复制代码

所有问答

复制代码
{% extends"index.html" %}
{% block logintitle %}个人中心{% endblock %}
{% block loginhead %}
    

{% endblock %}
{% block body %}
    

{% block user %}{% endblock %}
{% endblock %}
复制代码

所有评论

复制代码
{% extends 'user.html' %}
{% block user %}
{#
#} {#
#} {#
#} {#
#} {#
#} {##}

全部评论

    {% for foo in comments %}
  • {{ foo.create_time }}

    文章标题:{{ foo.question.title }}

    评论内容:{{ foo.detail }}

    {{ foo.author.username }}
  • {% endfor %}
{#
#} {#
#} {#
#} {#
#} {#
#} {% endblock %}
复制代码

个人中心

复制代码
{% extends 'user.html' %}
{% block user %}
{#    
#} {#
#} {#
#} {#
#} {#
#}

{{ username }}


个人信息

  • >用户:{{ username }}
  • >昵称
  • >文章篇数:{{ questions|length }}
  • >修改密码
{#
#} {#
#} {#
#} {#
#} {#

#} {% endblock %}
复制代码

8、搜索功能

主py文件

复制代码
@app.route('/search/',methods=['GET','POST'])
def search():
    search = request.args.get('search')
    question = Ques.query.filter(
        or_(
            Ques.title.contains(search),
            Ques.detail.contains(search)
        )

    ).order_by('-creat_time')

    return render_template('index.html',question=question)
复制代码

页面传输显示

 

9、密码保护

复制代码
  @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
复制代码

你可能感兴趣的:(期末作品检查)