diff --git a/__pycache__/app.cpython-36.pyc b/__pycache__/app.cpython-36.pyc new file mode 100644 index 0000000..d16709c Binary files /dev/null and b/__pycache__/app.cpython-36.pyc differ diff --git a/__pycache__/readQueue.cpython-36.pyc b/__pycache__/readQueue.cpython-36.pyc new file mode 100644 index 0000000..dbb06ed Binary files /dev/null and b/__pycache__/readQueue.cpython-36.pyc differ diff --git a/__pycache__/settings.cpython-36.pyc b/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000..45f35b8 Binary files /dev/null and b/__pycache__/settings.cpython-36.pyc differ diff --git a/app.py b/app.py index 55edcb9..8bfaaf8 100644 --- a/app.py +++ b/app.py @@ -1,40 +1,96 @@ -from flask import Flask,render_template, request, Response +from flask import Flask, render_template, request, Response from faker import Faker -import json, pika +import json, pika, uuid +import pymysql +import settings app = Flask(__name__) -def shop_random(n): +def shop_random(): fake = Faker(locale='zh_CN') # 随机生成姓名、商品、价格、地址,并返回一个字典 - shop = {"response": "下单成功", "data": {fake.name(): [fake.word(), fake.pyint(), fake.address()] for i in range(n)}} + shop = {uuid.uuid4().hex: [fake.name(), fake.word(), fake.pyint(), fake.address()]} return shop def send_queue(data={}): - connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) + connection = pika.BlockingConnection(pika.ConnectionParameters(settings.MQHost, settings.MQPort)) channel = connection.channel() # 声明一个名为 'message_queue' 的队列 - channel.queue_declare(queue='message_queue') + channel.queue_declare(queue=settings.MQName) # 将消息发送到队列中 channel.basic_publish(exchange='', - routing_key='message_queue', + routing_key=settings.MQName, body=data) # 关闭连接 connection.close() +def read_queue(): + # 建立与RabbitMQ服务器的连接 + connection = pika.BlockingConnection(pika.ConnectionParameters(settings.MQHost, settings.MQPort)) + channel = connection.channel() + + # 声明一个队列 + channel.queue_declare(queue=settings.MQName) + # 获取队列中的消息数量 + queue_info = channel.queue_declare(queue=settings.MQName, passive=True) + message_count = queue_info.method.message_count + connection.close() + return message_count @app.route('/', methods=["GET", "POST"]) def index(): if request.method == 'POST': - num = int(request.form.get('shop', 100)) - data = shop_random(num) - json_data = json.dumps(data, ensure_ascii=False) # 设置 ensure_ascii 为 False - send_queue(json_data) - return Response(json_data, content_type='application/json; charset=utf-8') - return render_template("index.html") + shops = [] + num = request.form.get('shop') if request.form.get('shop') != "" else '5' + num = int(num) + for i in range(num): + data = shop_random() + send_queue(json.dumps(data, ensure_ascii=False)) + shops.append(data) + return render_template("index.html", items=shops) + return render_template("index.html", items=[]) + +@app.route('/read', methods=["GET","POST"]) +def read(): + connection = pika.BlockingConnection(pika.ConnectionParameters(settings.MQHost,settings.MQPort)) + channel = connection.channel() + + # 声明一个名为 'message_queue' 的队列 + channel.queue_declare(queue=settings.MQName) + data = [] + + def callback(ch, method, properties, body): + nonlocal m + # 这里处理从队列中获取到的消息 + conn = pymysql.connect(host=settings.DBHost, user=settings.DBUser, password=settings.DBPassword) + cur = conn.cursor() + cur.execute('create database if not exists shop default charset "utf8";') + cur.execute('use shop;') + cur.execute('create table if not exists shop(id varchar(100), name varchar(20), goods varchar(20), price int, address varchar(50));') + k = eval(body.decode()).items() + for key, value in k: + cur.execute('insert into shop values(%s,%s,%s,%s,%s);', (key, value[0], value[1], value[2], value[3])) + data.append(k) + conn.commit() + cur.close() + ch.basic_ack(delivery_tag=method.delivery_tag) + m -= 1 + if m == 0: + ch.stop_consuming() + + if request.method == 'POST': + m = request.form.get('dshop') if request.form.get('dshop') else '5' + m = int(m) + print('1', m) + channel.basic_consume(queue=settings.MQName, + on_message_callback=callback, + auto_ack=False) # 将 auto_ack 设置为 False + channel.start_consuming() + message_count = read_queue() + return render_template("readQueue.html", shop_nums=message_count, items=data) if __name__ == '__main__': - app.run(host="0.0.0.0",port=80) \ No newline at end of file + app.run(host="0.0.0.0", port=80) diff --git a/readQueue.py b/readQueue.py deleted file mode 100644 index 1cf4429..0000000 --- a/readQueue.py +++ /dev/null @@ -1,31 +0,0 @@ -import pika -import pymysql - -# 建立到 RabbitMQ 的连接 -connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) -channel = connection.channel() - -# 声明一个名为 'message_queue' 的队列 -channel.queue_declare(queue='message_queue') - -def callback(ch, method, properties, body): - # 这里处理从队列中获取到的消息 - conn = pymysql.connect(host='localhost', user='root', password='123456') - cur = conn.cursor() - cur.execute('create database if not exists shop default charset "utf8";') - cur.execute('use shop;') - cur.execute('create table if not exists shop(name varchar(20), goods varchar(20), price int, address varchar(50));') - - for k,v in eval(body.decode()).get('data').items(): - cur.execute('insert into shop values(%s,%s,%s,%s);', (k, v[0], v[1], v[2])) - print(k, v[0], v[1], v[2]) - conn.commit() - cur.close() - -# 从 'message_queue' 队列中获取消息 -channel.basic_consume(queue='message_queue', - on_message_callback=callback, - auto_ack=True) - -print('Waiting for messages. To exit press CTRL+C') -channel.start_consuming() diff --git a/settings.py b/settings.py new file mode 100644 index 0000000..314d93e --- /dev/null +++ b/settings.py @@ -0,0 +1,11 @@ +# rabbitmq 配置 +MQName="message_queue" +MQUser="guest" +MQPassword="guest" +MQHost="localhost" +MQPort=5672 + +# mysql数据库配置 +DBHost="localhost" +DBUser="root" +DBPassword="QianFeng@123" \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 09712d7..ed46443 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,14 +4,88 @@ 商城主页 +

祝您购物愉快

请输入采购的商品数量: - +
+
+ + + + + + + + + + + + {% if items %} + {% for item in items %} + + {% for k in item %} + + + + + + {% endfor %} + + {% endfor %} + {% endif %} + +
用户编号用户名称商品名称商品金额收货地址
{{ k }}{{ item[k][0] }}{{ item[k][1] }}{{ item[k][2] }}{{ item[k][3] }}
- \ No newline at end of file + diff --git a/templates/readQueue.html b/templates/readQueue.html new file mode 100644 index 0000000..acbbe57 --- /dev/null +++ b/templates/readQueue.html @@ -0,0 +1,73 @@ + + + + + + 发货 + + + +
+ 请输入批量发货的商品数量: + +
+

当前未处理货物: {{ shop_nums }}

+ + + + + + + + + + + + {% for item in items %} + + {% for item_key,item_value in item %} + + + + + + {% endfor %} + + {% endfor %} + +
用户编号用户名称商品名称商品金额收货地址
{{ item_key }}{{ item_value[0] }}{{ item_value[1] }}{{ item_value[2] }}{{ item_value[3] }}
+ +