基于Flask狗屁不通文章生成器

年前我就晓得github有这么一个项目,挺有意思的,前两天在github下载了源码看了看,跟我想的不大一样…
我看现在市面上有gui版本的、也有纯js实现的,但是没有pythonweb框架去实现的,所以就简单写了一下

原作者将文章生成的思路为:D(主体)=A(名人名言前的垫话)+B(名人名言)+C(名人名言后的垫话)、E(废话)、F(是否另起一段),通过生成随机数,决定是否是D或者E,又或者是F。我这里不改变其思路
讲一下代码,前端就很简单,因为就是生成一个文章,没有过多的功能

<div id="main">
    <div id="title">文章生成器</div>
    <div id="name">
        <span>主题</span>
        <input id="info">
        <button onclick="getpaper()">生成</button>
    </div>
    <div id="paper"></div>
</div>
// 将问题发送到后台,并接收相应
function sendtoserver(text)
{
  var xmlhttp;
  if (window.XMLHttpRequest)
  {
    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
  }
  else
  {
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      //  相应完成,则显示出来
      // document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
      var answer=xmlhttp.responseText;
      show($.trim(answer));
    }
  }
  xmlhttp.open("POST","/Auto_add",true);
  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  // xmlhttp.send("id=bei&q="+$.trim(text));
    xmlhttp.send("id=bei&q="+$.trim(text));
}

function getpaper(){
    // var title=document.getElementById('info').value;
    var title=$('#info').val();
    // window.alert(test);
    sendtoserver(title);
}



function show(data) {
    var p = "<div class='item'>" + data + '</div>';
    $('#paper').append(p);
    $('#paper').scrollTop($('#paper')[0].scrollHeight);
}

其展示结果大概这样,返回的文章也是在paper这个div内,但是有一个缺点就是没有分段,返回的是整个字符串,没有分段
在这里插入图片描述
重点讲一下后端代码

  • 导入包
from flask import Flask, render_template, request
import random
import json
  • 配置页面路由,返回的是整个页面
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
@app.route('/Auto_index', methods=['GET', 'POST'])
def Auto_index():
    return render_template('Auto_index.html')
  • 配置返回数据的路由,注意这里有一个坑。如果把flask部署到服务器上,如果接收数据,最好用request.form[]去接收,如果用其他的方法可能会有各种各样的意外
@app.route('/Auto_add',methods=['GET','POST'])
def Auto_add():
    id = request.form['id']
    print(id)
    if id == 'bei':
        question = request.form['q']
        answer=getanswer(question)
        # print(answer)
        return answer
    else:
        pass
  • 处理的主体代码
#---------------处理自动生成文章代码
#读取json数据
def getjson(fileName=""):
    with open(fileName,mode='r',encoding="utf-8") as file:
        return json.loads(file.read())
#打乱排序
def ShuffleTraversal(mylist):
    Repeatability=2
    Pond = list(mylist) * Repeatability
    while True:
        random.shuffle(Pond)#打乱
        for element in Pond:
            yield element
#生成D(主体)
def getCelebrityQuotes(CelebrityQuotes,FrontWords,BackWords):
    nextCelebrityQuotes = ShuffleTraversal(CelebrityQuotes)#yield生成了一个生成器,next()可一直调用这个生成器
    xx = next(nextCelebrityQuotes)
    xx = xx.replace(  "a",random.choice(FrontWords) )
    xx = xx.replace(  "b",random.choice(BackWords) )
    return xx

#另起一段
def nextparagraph():
    xx = ". "
    xx += "\r\n"
    xx += "    "
    return xx
  • 处理返回的题目并返回文章数据
def getanswer(question):
    data = getjson("data.json")
    CelebrityQuotes = data["famous"]  # a 代表前面垫话,b代表后面垫话
    FrontWords = data["before"]  # 在名人名言前面弄点废话
    BackWords = data['after']  # 在名人名言后面弄点废话
    nonsense = data['bosh']  # 代表文章主要废话来源
    nextnonsense = ShuffleTraversal(nonsense)
    # nextCelebrityQuotes = ShuffleTraversal(CelebrityQuotes)
    answer=str()
    for x in question:
        tmp = str()
        while ( len(tmp) < 6000 ) :
            Branch = random.randint(0,100)
            if Branch < 5:
                tmp += nextparagraph()
            elif Branch < 20 :
                tmp += getCelebrityQuotes(CelebrityQuotes,FrontWords,BackWords)
            else:
                tmp += next(nextnonsense)
        tmp = tmp.replace("x",question)#json数据中x代表题目事件
        answer += tmp
    return answer
  • flask固定结尾代码

if __name__ == '__main__':
    app.debug=True
    app.run()

我这里上线了,测试了一下,主要就是两个问题

  1. 段落格式没处理好
  2. 重复度较高,因为是以本地json里的数据,也能理解

测试传送门
源码地址
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 Flask 框架中生成一个查询列表,首先需要安装 Flask 和相关的包。然后,可以在 Flask 程序中定义路由,指向一个函数来处理对查询列表的请求。在这个函数中,可以使用数据库查询获取列表数据,并使用模板渲染页面。 具体细节可能会因应用场景和数据源而有所不同,如果需要更多帮助可以提供更多细节。 ### 回答2: 基于Flask框架生成一个查询列表的步骤如下: 1. 导入Flask库和相关模块: ```python from flask import Flask, render_template, request, jsonify ``` 2. 创建Flask应用程序对象: ```python app = Flask(__name__) ``` 3. 创建一个包含查询数据的列表: ```python data = [ {'name': '张三', 'age': 20, 'gender': '男'}, {'name': '李四', 'age': 25, 'gender': '男'}, {'name': '王五', 'age': 30, 'gender': '女'} ] ``` 4. 定义一个用于处理查询请求的路由装饰器: ```python @app.route('/query', methods=['GET']) def query(): name = request.args.get('name') # 获取查询参数name的值 result = [d for d in data if d['name'] == name] # 根据name筛选查询结果 return jsonify(result) # 返回JSON格式的查询结果 ``` 5. 定义一个用于渲染查询页面的路由装饰器: ```python @app.route('/', methods=['GET']) def index(): return render_template('index.html') ``` 6. 创建一个HTML模板文件index.html,包含一个用于查询的表单: ```html <!DOCTYPE html> <html> <head> <title>查询列表</title> </head> <body> <form action="/query" method="GET"> <label for="name">姓名:</label> <input type="text" id="name" name="name"> <input type="submit" value="查询"> </form> </body> </html> ``` 7. 运行Flask应用程序: ```python if __name__ == '__main__': app.run() ``` 通过以上步骤,我们可以基于Flask框架生成一个查询列表,用户可以在浏览器上输入姓名并提交查询,然后返回符合条件的查询结果。 ### 回答3: 基于Flask框架生成一个查询列表可以遵循以下几个步骤: 1. 首先,需要安装Flask框架并导入所需的模块和库。可以使用以下命令来安装Flask:`pip install flask`。 2. 创建一个Flask应用程序的搭建文件。在文件中导入所需的模块,并创建一个Flask应用对象。例如,可以使用以下代码创建一个名为app的Flask应用对象: ``` from flask import Flask app = Flask(__name__) ``` 3. 创建一个路由函数,用于处理用户请求并返回查询列表。可以使用`@app.route`装饰器来指定路由的URL路径和请求方法。在路由函数中,可以执行查询操作并将结果返回给用户。例如,以下代码演示了如何创建一个返回查询列表的路由函数: ``` @app.route('/list', methods=['GET']) def query_list(): # 执行查询操作 results = get_results() # 自定义函数,用于执行查询操作并返回结果 # 返回查询列表给用户 return render_template('list.html', results=results) # 这里假设使用模板引擎渲染查询列表页面 ``` 4. 创建一个模板文件,用于渲染查询列表。可以使用模板引擎(如Jinja2)来构建动态页面。在模板文件中,可以使用变量来展示查询结果。例如,以下代码演示了如何使用循环和变量在模板中展示查询列表: ```htmldjango <!-- list.html --> <!DOCTYPE html> <html> <head> <title>查询列表</title> </head> <body> <h1>查询列表</h1> <ul> {% for result in results %} <li>{{ result }}</li> {% endfor %} </ul> </body> </html> ``` 注意,上述代码仅为示例,实际操作中需要根据具体需求进行修改和优化。 最后,可以运行Flask应用程序并通过浏览器访问相应的URL路径(例如`http://localhost:5000/list`)来查看生成的查询列表页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值