我正在开发一个可以向客户发送个性化消息的系统。我有一个包含联系人和姓名的文件。我要上传文件,然后阅读文件。在插入数据库之前,我想从html模板的文本框中向其中添加一条消息。例如,我会说:亲爱的[name],谢谢。它将遍历excel文件并将联系人和已生成的消息(如Dear Ronald)插入数据库,谢谢。
我设法添加以上传excel文件并将联系人插入数据库表中。但是我无法连接到文本框消息
Views.py
def upload(request):
template = 'sms/upload.html'
prompt = {'order':'order of the CSV should be'}
context = {}
list1 =[]
if request.method =="GET":
return render(request, template, prompt)
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request,'This is not a csv file')
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
# row = csv.reader(io_string, delimiter=',', quotechar="|")
# next(io_string)
for column in csv.reader(io_string, delimiter=',',
quotechar="|"):
s = ''.join(column[0].split())
p=f"{254}{s[-9:]}"
_, created = Contact.objects.update_or_create(
phone_numbers = p,
first_name=column[1],
last_name=column[2],
email=column[3],
author=request.user
)
context = {}
# context1 = {list1}
# print (context1)
# print(column)
return render(request, template, context)
#upload.html
{% extends 'sms/base.html'%}
{% block content%}
{% if messages %}
{% for message in messages %}
<div class="">
<strong>{{message|safe}}</strong>
</div>
{% endfor %}
{%else%}
<!-- {{order}} -->
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<!-- <label>Upload file</label> -->
<input type="file" name="file">
<p>Only accepts CSV file</p>
<button type="submit">Upload</button>
</form>
{% endif %}
<div class="col-sm-10">
<h4>Send message </h4>
<div class="col-md-12">
<form class="form-group" action="" method="POST">
{% csrf_token %}
Message: <br/>
<textarea name="text_message" id="phone" class="form-control"
cols="14" rows="6" placeholder="Type your message here">
<br/>
<br>
<input class="btn btn-secondary" type="submit" value="Send Now"/>
</form>
{%endblock content%}
我想将保存的字段另存为变量,并传递给upload.html模板,然后处理将消息插入数据库中
答案 0 :(得分:0)
要插入数据,首先必须正确读取数据。如果您在词典列表 [{'name':'abc','contact':123},{'name':'xyz', 'contact':456}]
中读取csv数据,则迭代将很容易。
熊猫是处理数据的最佳库。
您可以使用此代码获取字典的列表
get_file = request.FILES['files']
df = pd.read_csv(get_file)
df = df.where((pd.notnull(df)), '')
row = df.shape[0]
col = df.shape[1]
lista = []
for r in range(row):
aDict = {}
for c in range(col):
v = df.iat[r,c]
k = df.columns[c]
aDict[k]=v
lista.append(aDict)
此处lista
返回字典列表
列表中的每个字典代表(csv,excel)的行。然后,您可以通过列名lis['name']
轻松地将此数据保存在DB中
在您可以传递上下文之后。
注意:您需要通过
安装熊猫pip install pandas