Python Flask: 实现编辑笔记功能(无数据库版)

来自CloudWiki
Cloud17讨论 | 贡献2023年1月7日 (六) 07:15的版本 模板
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

代码

# 编辑笔记
@app.route('/edit_article/<string:id>', methods=['GET', 'POST'])
@is_logged_in
def edit_article(id):   

    article={}    
    with open('sample.csv',"r") as fr:
        for line in fr:    #文件对象可以直接迭代
            #print(line)
            r = line.split(",")
            if r[0] !=id:
                continue
            else:
                #9,ansible学习,zhangsan,2022-12-30 16:52:59,ansible是一个有用技术
                
                article['id']= r[0];article['title']=r[1];article['author']=r[2];article['update_date']=r[3];
                article['content']=r[4]                
                break;
    
    # 检测笔记不存在的情况
    if not article:
        flash('ID错误', 'danger') # 闪存信息
        return redirect(url_for('dashboard'))
    
    # 获取表单
    form = ArticleForm(request.form)
    if request.method == 'GET':
        # 从数据库中获取表单字段的值
        form.title.data = article['title']
        form.content.data = article['content']
        return render_template('edit_article.html', info=form)   # 渲染模板
    
    elif request.method == 'POST':# 如果用户提交表单,并且表单验证通过
        # 获取表单字段内容
        #9,ansible学习,zhangsan,2022-12-30 16:52:59,ansible是一个有用技术
        with open('sample.csv',"r") as fr:
            line_list = fr.readlines()
            for i in range(0,len(line_list)):    #文件对象可以直接迭代
                #print(line)
                r = line_list[i].split(",")
                if r[0] !=id:
                    continue
                else:
                    r[1] = form.title.data
                    r[2] = session['username']
                    r[3] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
                    r[4] = form.content.data
                    line_list[i] = ",".join(r)
                    break;
        with open('sample.csv',"w") as fw:
            fw.writelines(line_list)
            #fw.write("123")
            
        
        flash('更新成功', 'success') # 闪存信息
        return redirect(url_for('dashboard')) # 跳转到控制台


模板

edit_article.html:

<html>
  <head>
    <meta charset="utf-8">
    <title>读书笔记</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/css/style.css">
    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </head>
  <body>
    <nav class="navbar navbar-default">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="/">学习笔记</a>
      </div>
      <div id="navbar" class="collapse navbar-collapse">
        <ul class="nav navbar-nav">
          <li><a href="/">主页</a></li>
          <li><a href="/articles">笔记</a></li>
          <li><a href="/about">关于</a></li>
        </ul>
        <ul class="nav navbar-nav navbar-right">
 
            <li><a>欢迎 {{session.username}}</a></li>
            <li><a href="/logout">退出</a></li>

        </ul>
      </div><!--/.nav-collapse -->
    </div>
  </nav>
<div class="container">
  <h1>编辑笔记</h1>
 
  <form method="POST" action="">
    <div class="form-group">
	   <label>标题</label> 
    <input type="text" name="title" class="form-control" value="{{info.title.data}}"> 
      
    </div>
    <div class="form-group">
	 <label>内容</label> 
	   <input type="text" name="content" class="form-control content-text" value="{{info.content.data}}" id="editor">
      
    </div>
    <p><input class="btn btn-primary" type="submit" value="提交">
  </form>

    <script src="//cdn.ckeditor.com/4.11.2/standard/ckeditor.js"></script>
    <script type="text/javascript">
      <!-- CKEDITOR.replace( 'editor') -->
    </script>
</div>
 
<!-- Footer -->
<footer class="page-footer font-small blue" style="margin-top: 50px">
    <!-- Copyright -->
    <div class="footer-copyright text-center py-3">
        Copyright ©2007-2019 <a href="http://www.mingrisoft.com">明日科技有限公司</a>
        All Rights Reserved 吉ICP备10002740号-2 吉公网安备22010202000132
    </div>
    <!-- Copyright -->
  </footer>
  <!-- Footer -->
  </body>
</html>


Python2023010101.png