首页 新闻 会员 周边

django视图

0
[待解决问题]

在django的视图中定义函数,怎么实现把变量写入文本文件,用传统的python函数f.write不能执行

Linux^O^的主页 Linux^O^ | 菜鸟二级 | 园豆:208
提问于:2023-04-10 15:55
< >
分享
所有回答(2)
0

在Django视图函数中,可以使用Python内置的open()函数来打开文件,并使用其write()方法将变量写入文件中。

以下是一个示例视图函数,将字符串写入到名为"myfile.txt"的文件中:

python

from django.http import HttpResponse

def my_view(request):
my_text = "Hello, world!"

# 打开文件并将文本写入文件
with open("myfile.txt", "w") as f:
    f.write(my_text)

# 返回响应
return HttpResponse("Text written to file.")

在这个例子中,视图函数使用with open()语句打开文件,在文件中写入字符串my_text,然后关闭文件。最后,它返回一个HttpResponse对象,指示成功将文本写入文件。

请注意,这里的文件路径是相对于当前工作目录的。如果想要在特定的目录中保存文件,可以在文件名中指定该目录的完整路径。

此外,如果想要在Django项目中保存数据,建议使用Django提供的模型(Model)和数据库(Database)来进行持久化存储,这将更加安全可靠,也符合Django的设计理念。

Technologyforgood | 园豆:5675 (大侠五级) | 2023-04-10 21:15

大神 我写的方法和你写的一样,执行之后可以返回正确的页面,但文本文件里面还是没有任何值,您的文本文件正常的吗

支持(0) 反对(0) Linux^O^ | 园豆:208 (菜鸟二级) | 2023-04-11 09:15
0

打印出log看看报错原因,如果生成了文件,但是文件没有内容,可能是打开文件过程中出了问题,直接跳出了。

Sunny-King | 园豆:363 (菜鸟二级) | 2023-04-11 10:33

log也没有任何报错,原本我是直接建号文本文件,但刚刚试了下,没有文件也不会主动创建,像是直接跳过了那几行代码。。。

支持(0) 反对(0) Linux^O^ | 园豆:208 (菜鸟二级) | 2023-04-11 10:39

@LinuxO: 会不会没有调用视图函数?

支持(0) 反对(0) Sunny-King | 园豆:363 (菜鸟二级) | 2023-04-11 11:14

@Sunny-King: 也调用了啊,我把代码粘贴下
views.py
def input(request):
# 判断是post还是get请求 post提交用户名密码
if request.method == "GET":
return render(request, 'input.html')
else:
# 在请求体中获取数据,再进行校验{user。。。pwd。。。}
ip = str(request.POST.get('ip'))
username = str(request.POST.get('user'))
password = str(request.POST.get('pwd'))
# 在数据库中校验用户名和密码的合法性
# 成功 跳转到首页index/
# 不成功,再次让用户看到 login.html界面 弹出用户名密码错误的提示信息
if username == "zyj" and password == "bishe":
f = open('input.txt','w')
f.write(ip)
f.write("\n")
f.write(username)
f.write("\n")
f.write(password)
f.write("\n")
f.flush()
f.close()
return render(request,'index.html')
else:
return render(request, 'input.html', {"error": "用户名或密码错误"})
ssh.html
<form method="post" action="input">
<button type="submit" class="btn" style="top:610px;left:170px;"><a href="/ssh/input/">开始运行</a></button>
</form>
input.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% load static %}
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="{% static "css/adstyle.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/userstyle.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/code/prism.css" %}" />
<link rel="stylesheet" href="https://pyscript.net/latest/pyscript.css" />
<script defer src="https://pyscript.net/latest/pyscript.js"></script>
{% include "header.html" %}
{% include 'menu.html' %}
</head>
<body>
<form method="post">
<div id="winmsg" style="
position: fixed;
top:0;
left:0;
width:100%;
height: 100%;
background: rgba(0,0,0,0.3);
z-index: 99999;">
{#创建主窗口#}
<div style="position: fixed;
top:50%;
left:50%;
width:60%;
max-width: 500px;
background: #FFF;
transform: translate(-50%,-50%);
border-radius: 30px;
padding: 60px 50px;
">
{# 标题#}
<h3 style="font-weight: bold;;font-size: 30px;top:10px">请输入提示内容</h3>
{# 内容#}
<div style="font-size:30px;margin-top: 26px;line-height: 40px;color:#999; ">
<input style="text-align:center;" type="text" placeholder="IP" name="ip"><br>
<input style="text-align:center;" type="text" placeholder="Username" name="user"><br>
<input style="text-align:center;" type="password" placeholder="Password" name="pwd">
</div>
<button type="submit"
style="display: block;
background: #008f00;
color: #FFF;
text-align: center;
font-weight: bold;
font-size: 19px;
line-height: 60px;
margin: 0 auto;
margin-top: 20px;
border-radius: 32px;
width: 80%;
border-color: #00A000;
{#onclick="javascript:document.querySelector('#winmsg'.remove())"#}
">提交</button>
<span style="color:red;font-size:16px;">{{ error }}</span>
</div>
</div>
</form>
</body>
</html>
url
path('ssh/input/',views.input),
是通过ssh.html的一个button到input页面,然后input.html中输入信息之后好像不执行那几行代码

支持(0) 反对(0) Linux^O^ | 园豆:208 (菜鸟二级) | 2023-04-11 21:09

@LinuxO: input.html文件有问题,
可以开启调试模式即可看到报错原因。我这边可以正常写入文件了。

支持(0) 反对(0) Sunny-King | 园豆:363 (菜鸟二级) | 2023-04-11 21:54

@Sunny-King: 感谢大神,我刚刚发现好像的django视图好像不能使用open函数,一使用就会报错,或者就是干脆不能执行,我再去查查资料

支持(0) 反对(0) Linux^O^ | 园豆:208 (菜鸟二级) | 2023-04-11 23:51

@LinuxO: 可以用open。我的意思是你在input.html文件对应的位置加上绿色框内的内容就可以了,否则数据传不到后台,根本就走不到if判断。

支持(0) 反对(0) Sunny-King | 园豆:363 (菜鸟二级) | 2023-04-12 08:56

@Sunny-King: 我试了,还是不行啊。
可以显示if判断里最后显示的页面,但是文本文件就是没内容

支持(0) 反对(0) Linux^O^ | 园豆:208 (菜鸟二级) | 2023-04-12 09:09

@LinuxO:那应该就是环境问题了,我用你的代码是可以的。

支持(0) 反对(0) Sunny-King | 园豆:363 (菜鸟二级) | 2023-04-12 09:20

@Sunny-King: 好的,感谢,我调一下环境看看是出什么问题了

支持(0) 反对(0) Linux^O^ | 园豆:208 (菜鸟二级) | 2023-04-12 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册