博客设计

一、系统概要说明

1、设计数据库,数据库设计是网站设计的重点,需要对网站需求进行分析,设计适合网站需求的数据库。

2、注册页面,设计网站需要用户的使用,注册则是重要的一部分,用户注册需要对用户信息的管理,因此,需要数据库的连接,进行用户注册的验证。

3、登录功能,在用户注册了账号后,拥有了该网站的使用权,则可以进行登录,而登录也需要数据库的验证。

4、用户发布问答,该网站是博客的发布平台,用户可以将身边的见闻发布到网站,此功能也需要数据库的连接,将用户发表的问答存到数据库的question表中,以用户唯一的id号作为外键。

5、用户发布博客的问答后则会跳到网站首页,首页是展示该网站的所以博客信息,以发布的最新日期排序进行展示,用户可根据兴趣点击查看网站的博客标题,进入博客的详情页面,了解博客的具体信息。

6、博客详情页中具有评论及推荐文章功能,用户可对博客进行评论发表还可对文章进行点赞及收藏,此操作过程存入数据库的comment表中,以用户id作为外键;网站还根据用户感兴趣的博客推荐相应类型的文章。

7、个人中心页面,网站根据用户的活跃度,呈现用户发布的新闻,评论文章,收藏文章以及点赞。

8、网站具有模糊搜索功能,当用户查找相应信息是,可根据用户输入的信息进行模糊搜索,提高用户的体验度。

9、密码保护功能,用户注册时设置的密码存储到数据库中,此时数据会将用户的密码进行加密,提高用户使用的安全性。

二、网站结构设计

1.登录注册

2.修改个人信息

3.搜索

4.发布博客和评论

三.模块详细设计

1.首页模块

@app.route(‘/‘)

def index():

if request.args.get(‘info‘):

info = request.args.get(‘info‘)

else:

info = None;

context = {

‘questions‘: Question.query.order_by(‘-creat_time‘).all(),

‘cf‘: Cf.query.all(),

‘info‘: info,

‘hot‘: Question.query.order_by(‘-click‘).all()[0:5]

} return render_template(‘index.html‘, **context)

2.注册模块

@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 ‘error:user exitst‘

else:

user = User(username=username, password=password)

db.session.add(user)  # 加入数据库

db.session.commit()

return redirect(url_for(‘login‘))

3.登录模块

@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[‘username‘] = user.username
                session[‘user_id‘] = user.id
                session.permanent = True
                # 重新定位到首页
                return redirect(url_for(‘index‘))
            else:
                # 重新定位到注册
                return redirect(url_for(‘login‘))
        else:
            return redirect(url_for(‘login‘))

4.发布模块

@app.route(‘/question‘, methods=[‘GET‘, ‘POST‘])
@loginFirst
def question():
    if request.method == ‘GET‘:
        cf = Cf.query.all()
        return render_template(‘question.html‘, cf=cf)
    else:
        title = request.form.get(‘title‘)
        detail = request.form.get(‘detail‘)
        author_id = request.form.get(‘author_id‘)
        cf = request.form.get(‘cf‘)
        question = Question(title=title, detail=detail, author_id=author_id, cf=cf)
        db.session.add(question)  # 加入数据库
        db.session.commit()
        return redirect(url_for(‘index‘))

5.评论模块

@app.route(‘/answer/‘, methods=[‘GET‘, ‘POST‘])
def answer():
    if request.method == ‘POST‘:
        question_id = request.form.get(‘question_id‘)
        author_id = request.form.get(‘author_id‘)
        detail = request.form.get(‘detail‘)
        comment = Comment(question_id=question_id, author_id=author_id, detail=detail)
        db.session.add(comment)
        db.session.commit()
        return redirect(url_for(‘detail‘, question_id=question_id))
@app.route(‘/commentaries/<user_id>‘)
def commentaries(user_id):
    userCommentaries = Comment.query.filter(Comment.answer_id == user_id).all()
    num = len(userCommentaries)
    id = session.get(‘user_id‘)
    if id:
        user = User.query.filter(User.id == id).first()
    else:
        user = {}
    return render_template(‘commentaries.html‘, userCommentaries=userCommentaries, user=user, num=num)

6.更改个人信息

@app.route(‘/uploadLogo/<user_id>‘, methods=[‘GET‘, ‘POST‘])
def uploadLogo(user_id):
    user = User.query.filter(User.id == user_id).first()
    f = request.files[‘logo‘]
    basepath = os.path.dirname(__file__)  # 当前文件所在路径
    upload_path = os.path.join(basepath, ‘static/uploads‘, f.filename)  # 注意:没有的文件夹一定要先创建,不然会提示没有该路径
    f.save(upload_path)
    user.icon = ‘uploads/‘ + f.filename
    db.session.commit()
    return redirect(url_for(‘setPassword‘, id=user_id));
 
@app.route(‘/setPassword/<id>‘, methods=[‘GET‘, ‘POST‘])
@loginFirst
def setPassword(id):
    if request.method == ‘GET‘:
        return render_template(‘setPassword.html‘)
    else:
        user = User.query.filter(User.id == id).first()
        if user:
            if user.check_password(request.form.get(‘old‘)):
                user.password = request.form.get(‘new1‘)
                db.session.commit()
                info = ‘修改成功‘
            else:
                info = ‘原密码错误‘
        else:
            info = ‘未知错误‘
        return redirect(url_for(‘index‘, info=info))

7.模糊查询

@app.route(‘/search‘)
def search():
    qu = request.args.get(‘q‘)
    c = ‘‘ if request.args.get(‘c‘) == ‘‘ else request.args.get(‘c‘)
    y = ‘‘ if request.args.get(‘y‘) == ‘‘ else request.args.get(‘y‘)
    query = Question.query.filter(
        or_(
            Question.title.contains(qu),
            Question.detail.contains(qu),
        ),
        Question.cf.like(‘%‘ + c + ‘%‘),
        Question.creat_time.like(‘%‘ + y + ‘%‘),
    ).order_by(‘-creat_time‘).all()
    context = {
        ‘questions‘: query,
        ‘cf‘: Cf.query.all(),
        ‘hot‘: Question.query.order_by(‘-click‘).all()[0:5]
    }
    return render_template(‘index.html‘, **context)

四.数据库设计

Collection = db.Table(
    ‘collection‘,
    db.Column(‘id‘, db.Integer, primary_key=True, autoincrement=True),
    db.Column(‘book_id‘, db.Integer, db.ForeignKey(‘question.id‘)),  # 评论对应的文章的id
    db.Column(‘collection‘, db.Integer, db.ForeignKey(‘user.id‘)),  # 收藏用户的id
    db.Column(‘createdate‘, db.DATETIME)  # 发布时间
)
 
 
class User(db.Model):
    __tablename__ = ‘user‘
    # 建立一个表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)
    say = db.Column(db.String(50))
    icon = db.Column(db.String(50))
    collection = db.relationship(‘Question‘, secondary=Collection, backref=db.backref(‘user‘, lazy=‘dynamic‘),
                                 lazy=‘dynamic‘)
 
    @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):
        return check_password_hash(self._password, row_password)
 
 
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(‘Question‘, backref=db.backref(‘comment‘))
    author = db.relationship(‘User‘, backref=db.backref(‘comment‘, order_by=creat_time.desc))
 
 
class Question(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‘))
    cf = db.Column(db.Integer, db.ForeignKey(‘cf.id‘))
    look = db.Column(db.Integer)
    click = db.Column(db.Integer)
    author = db.relationship(‘User‘, backref=db.backref(‘question‘))
    cfClass = db.relationship(‘Cf‘, backref=db.backref(‘question‘))

六.成品展示

原文地址:https://www.cnblogs.com/z1-z/p/9191112.html

时间: 2024-11-06 09:29:27

博客设计的相关文章

【个人博客设计】

概述: 本网站为自己的个人博客网站,从开工是2020.1.16号开始,到1.29号已经完成了大部分功能,从前端的显示以及后端的逻辑处理都是根据自己的经验来写的,因为感觉写的实在是太乱了,所以重新把这个系统写一下.因为记录是一直都在跟进的,截止到2.21号,已经完成了PC端阅读与管理和小程序端的阅读,大概历时35天,在此之前,以下使用的框架以及插件都是我从未接触过的,所以可以说从根本上来说,我是花了一个月的时间学习了以下的框架.插件与小程序,并且实现了这样的一个项目,这并不说我想表示有多么的厉害,

【个人博客设计】框架与插件篇

概述 后端:Maven+Springboot+springsecurity+mybatis+jpa+redis+druid+lombok+pagehelper 前端:editor.md+amazeui+thymeleaf+uni-app+colorui 1.后端框架 1.1.Maven Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件.Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Maven 的缺省构建规则有较高的可

【个人博客设计】开发工具篇

概述 开发工具:IDEA+Navicat+tomcat+Hbuilder+微信开发者工具 1.1.IntelliJ IDEA 对于java的开发人员来说,eclipse和IDEA都是非常不错的ide工具,虽然说IDEA的占用内存多并且不免费,让很多人望而止步,但是不得不说IDEA是我用过最好的java开发工具.等你放弃eclipse去用惯IDEA后,除了刚开始的不适应外,你可能会真的觉得IDEA是真的不错. Intellij IDEA和EclipsE之间的的全面对比 1.2.Navicat Pr

个人博客设计记录

一.使用的中间件 1. koa 2. koa-static 实现静态资源服务器 3. koa-bodyparse 实现body的解析,主要是post请求数据的解析 4. koa-logger 控制台日志中间件 5. koa-session-minimal  适用于koa2 的session中间件,提供存储介质的读写接口 ,但真正存储的数据库等配置依赖其他 6.  koa-mysql-session  为koa-session-minimal中间件提供MySQL数据库的session数据读写操作.

博客项目续

# 博客项目 ### 昨日内容完善 - 密码加密存储 ```python from werkzeug.security import generate_password_hash, check_password_hash # 用户模型 class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True) passw

基于Go博客wblog的理解和修改。

初衷 ? 自学Go语言已经一段时间,想通过博客更深入理解go语言.最终通过Gin语言定位了wblog博客框架.wblog是基于基于gin+gorm开发的个人博客项目. ? 学习别人的博客是一个抓狂的过程,不仅要疯狂学习扩展的知识,比如gin框架,gorm,还要理解原作者的思想和构建过程. ? 原项目仅做了简单的英文注释.我则根据原项目增添了很多自己理解的注释和说明,方便其他后来人学习参考.同时更新原项目依赖,可以一键运行. 修改 增加了中文注释,更多的是我对原项目的理解,方便其他人理解和学习.

一个前端写的php博客系统--支持markdown哦

部署的地址 我的博客地址:http://www.weber.pub/ 起因 最近买了个新的域名,同时在阿里云申请了免费的虚拟主机...借此机会就想搞个自己的博客站点,虽然之前也使用了hexo + github . WordPress 做过,但是我的阿里云虚拟主机实在是不知道怎么去搞hexo (也许根本就搞不起来,除非自己花钱买主机,哈哈)...WordPress总是感觉好笨重,运行起来一股的人到中年,气喘吁吁啊...百度之后,typeecho成了首选,但是markdown竟然有问题...一口老血

ThinkPHP5 个人博客框架设计

本片博文主要做个人博客框架的设计.好的项目,源于好的设计.在设计阶段多设计/多琢磨,好过以后费劲的修改. 设计工具种类繁多,博主使用的时一款叫ProcessON的在线框架图设计工具,这里不是广告,只是为了让大家知道这么一个方便的工具. 个人博客包含以下几大部分,本系列基本按照这个思路来做个人博客

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业