用户文章评论

flask_sqlalchemy数据库的数据类型分为:String(有长度限制的字符串), Text(较长的unicode文本) , Integer, DateTime, Float, Boolean, PickleType(存储为一个持久化的 Python 对象),LargeBinary(任意大的二进制数据)。

  • 对于其中的Datetime,属性字段的设置,如果是获取自动获取当前的时间,默认的参数只有utc标准时间,如果要变成北京时间,需要自己对db.Column()函数内的default 字段的入口函数进行修改如下

    from datetime import datetime
    def time():
      from pytz import time
      btime=time.zone('Asia/Shanghai') #没有北京时区 就用上海吧差不多
      time=datetime.now(btime)
      return time
    Time=db.Column(db.Datetime,index=True,default=time)
    
    #如果是使用使用UTC标准时间的话参数: default=Datetime.now('UTC')
    

  • 继续将上次的博客模块吧,设置Flask基本的框架都差不多掌握了,想建立一个博客,页面设计真心麻烦,Bootstrap虽然后基本的控件,但是页面还是有布局,颜色方面的配置,才能好看(又要开始学html各种标签的布局功能,真心麻烦),感觉要真正做好还有好长一段路要走。找到一个特别中意的模板欲思模板,缺少基于PHP,TAT 真正做好一件事还要好长的轮要走。不说了,继续讲代码,布置好登陆登出认证以后,下一步需要设计网页Blog的评论。对于文章,评论需要建立数据库保存。首先建立数据库模型

    Models.py

    from  appconfig import  loginmanage,db
    from flask_login import  UserMixin
    from datetime import datetime
    from markdown import  markdown
    def time_now():
      from pytz import timezone
      UTC = timezone('Asia/Shanghai')
      return datetime.now(UTC)
    
    class Post(db.Model):
      __tablename__='posts'
      id = db.Column(db.Integer, primary_key=True)
      title=db.Column(db.String)
      body=db.Column(db.Text)
      body_html=db.Column(db.Text)
      time=db.Column(db.DateTime,index=True,default=time_now )
      comments=db.relationship('Comment',backref='post')
      #Post与Comment建立联系,Post中建立comments字段,Comment建立,
      #post字段
      # author_id=db.Column(db.Integer,db.ForeignKey('users.id'))
      @staticmethod
      def bodyhtml(target, value,oldvalue,initiator):
              target.body_html = markdown(value)
    
    
    #有些数据库不支持事件,sqlalchemy自己就可以建立数据库监听事件来支持
    
    
    #利用静态函数,在数据库修改之前,运行静态方法,将md文本转化为html,保存在
    
    
    #该存储对象的body_html字段之中
    
    db.event.listen(Post.body,'set',Post.bodyhtml)
    
    class Comment(db.Model):
      __tablename__ = 'comments'
      id = db.Column(db.Integer, primary_key=True)
      body = db.Column(db.String)
      created = db.Column(db.DateTime, index=True, default=time_now)
      post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
      author_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    识图函数view.py

    from article import  article as app
    from flask import make_response,render_template
    from werkzeug.utils import secure_filename
    from flask import request, redirect, url_for
    from article.forms import  PostForms,CommentForm
    from article.models import  Post,Comment
    from  flask.ext.login import  login_required,current_user
    from appconfig import db
    import  os
    @app.route('/')
    def index():
      s=render_template('index.html',title='hello sunqi',body='**Hello Sunqi**')
      response = make_response(s)
      response.set_cookie('name', 'theusername')
      return response
    
    @app.route('/Service')
    def Service():
      return 'service'@app.route('/about')
    def about():
      return 'about'@app.route('/user/<regex("[a-z]{3}"):username>')  # 路由匹配
    def user(username):
      return username
    
    
    #上传函数
    
    @app.route('/upload', methods=['GET', "POST"])
    def upload():
      if request.method == "POST":
          f = request.files['file']
          if f.filename != '':
              basepath = os.path.abspath(os.path.dirname(__file__))
              uploadpath = os.path.join(basepath, '')
              f.save(uploadpath + secure_filename(f.filename))
              post=Post(title='sunqi',body='********')
              db.session.add(post)
              db.session.commit()
              return redirect(url_for('article.upload'))
      return render_template('upload.html')
    
    
    #获取post列表,可以进行评论,评论存入数据库
    
    
    #功能初步阶段,还需要进行修改,例如还需要返回评论内容等等
    
    @app.route('/post/<int:id>',methods=['POST','GET'])
    def post(id):
      #获取post页相亲
      post=Post.query.get_or_404(id)
      #
      #
      #评论列表
      form=CommentForm()
      if form.validate_on_submit():
          comment=Comment(body=form.body.data,post=post)
          db.session.add(comment)
          db.session.commit()
    
      return render_template('details.html',title=post.title,
                             form=form,post=post)
    
    
    #多个地址指向同一个路由函数,且要求用户已经登录
    
    
    #实现的功能是修改或者提交article ,并且将数据存入Post数据库
    
    @app.route('/edit')
    @app.route('/edit/<int:id>')
    @login_required
    def edit(id=0):
      post=None
      form=PostForms()
      if id==0:
          #新添加
          post=Post(author_id=current_user.id) 
          #这个地方需要注意,很奇怪的是有例子使用author=current_user.........py2.7可以成功,我的py3报错,兼容性差这么远?
      else:
          id!=0
          #修改
          post=Post.query.get_or_404(id)
      if form.validate_on_submit():
          post.body=form.body.data
          post.title=form.title.data
          db.session.add(post)
          db.session.commit()
      mode='新添加'
      if id>0:
          mode='编辑'
      return render_template('post/edit.html',
                             title='%s-%s'%(mode,post.title),
                             form=form,post=post)
  • 蓝图文件 包名:aritcle

      init.py(下斜杆md貌似写不出来)

    from flask import  Blueprint
    article=Blueprint('article',__name__)
    from . import  view,forms #注意一定是这个位置,避免loop import错误

    在使用flask_login模块前,必须设置一个装饰器,用于获取当前用户的实例,好多例子中对return 中user_id,是int(user_id),实际上发现好像并没有什么区别程序还是一样效果,可以对比官方文档就是use_id…….

    @loginmanage.user_loader
    def load_user(user_id):
    return User.query.get(user_id)

实现文章评论功能需要以下步骤: 1. 创建评论表 可以创建一个名为"Comment"的表,包含以下字段: - CommentId: 评论的唯一标识符 - ArticleId: 评论所属文章的唯一标识符 - UserId: 评论用户的唯一标识符 - CommentContent: 评论内容 - CommentDate: 评论日期 2. 创建评论页面 创建一个评论页面,让用户可以在该页面查看文章和发表评论。 3. 实现评论功能 在评论页面中,用户可以填写评论内容,然后点击提交按钮,将评论内容插入到评论表中。 可以使用ADO.NET来连接数据库,并使用SQL语句来插入评论数据。 例如,以下代码可以用来插入一条新的评论: ``` string connectionString = "Data Source=your_server;Initial Catalog=your_database;User ID=your_username;Password=your_password;"; string query = "INSERT INTO Comment (ArticleId, UserId, CommentContent, CommentDate) VALUES (@ArticleId, @UserId, @CommentContent, @CommentDate)"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(query, connection); command.Parameters.AddWithValue("@ArticleId", articleId); command.Parameters.AddWithValue("@UserId", userId); command.Parameters.AddWithValue("@CommentContent", commentContent); command.Parameters.AddWithValue("@CommentDate", DateTime.Now); connection.Open(); command.ExecuteNonQuery(); } ``` 在将评论插入到评论表之后,可以刷新评论页面,以显示新的评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值