陈文忻 2022-02-14 09:19 采纳率: 60%
浏览 95
已结题

Flask出现500报错

问题遇到的现象和发生背景

在xes的python编辑器里面,内存只有20M,在以前都可以的情况下,最近一次报了500错误

问题相关代码,请勿粘贴截图

main.py

from flask import Flask,render_template,request,redirect,session
from getnews import get_news
import pickle
app = Flask(__name__)
#设置秘钥
app.config['SECRET_KEY']='**##$$..tuiio23'

@app.route("/logout")
def logout():
    session.clear()
    return redirect("/")
ids=[{"name":"admin","pwd":"123456"},{"name":"UT","pwd":"aiyayouchoule"},{"name":"小震","pwd":"wenxinshimvp"},{"name":"陈文忻","pwd":"xiaozhenniubi"}]
#{
#设置登录入口路由,响应HTML页面
@app.route("/login")
def login_enter():
    return render_template('login.html')  

#设置用户登录路由,响应登录是否成功
@app.route("/loginpost",methods=["POST"])  
def login():
    name = request.values.get("user")
    pwd = request.values.get("pwd")
    for cwx in ids:
        if name==cwx["name"] and pwd==cwx["pwd"]:  
            session["name"] =  name
            return redirect("/")
    return render_template("fail.html")

# 读取pickle文件中保存的留言
try:
    with open("messages.pickle",'rb') as f:
        messages = pickle.load(f)
except:
    messages = []

# 呈现和保存留言
@app.route("/messageboard")
def message_board():
    name = request.values.get("who")
    text = request.values.get("text")
    if name and text:
        message = {"name":name,"text":text}
        messages.append(message)
        with open("messages.pickle",'wb') as f:
            pickle.dump(messages,f)
    return render_template("messageboard.html",messages = messages)

#删除留言
@app.route("/delmsg") 
def del_msg():
    msgtext = request.values.get("text")  
    for msg in messages:             
        if msg["text"] == msgtext:    
            messages.remove(msg)      
            with open("messages.pickle","wb") as f:
                pickle.dump(messages,f)              
    return redirect("/messageboard")            

#读取pickle文件中保存的作品
try:
    with open("works.pickle","rb") as f:
        works = pickle.load(f)
except:
    works = []
  
# 默认网址对应的路由
@app.route('/')
def index():
    hot_news = get_news()
    return render_template("index.html", news = hot_news[:7:1],works = works)

@app.route("/redian")
def re():
    r=get_news()
    return render_template("redian.html",new=r)

@app.route("/uploadwork")
def upload_work():
    return render_template("uploadwork.html")
    
@app.route("/processwork",methods=["POST"])
def process_work():
    title = request.values.get("title")
    link = request.values.get("link")
    object = request.files.get("file")
    if title and link and object:
        fname = object.filename
        object.save("static/images/"+fname)
        new_work = {"title":title,"link":link,"file":fname}
        works.append(new_work)
        with open("works.pickle","wb") as f:
            pickle.dump(works,f)
        return redirect("/")
    else:
        return render_template("uploadwork.html")
        
@app.route("/delete") 
def del_work():
    work_title = request.values.get("worktitle")
    for work in works:
        if work["title"] == work_title:
            works.remove(work)
    with open("works.pickle","wb") as f:
        pickle.dump(works,f)
    return redirect("/")
#}
app.run()

index.html

getnews.py

def get_news():
    import requests #导库不说了
    import bs4
    response = requests.get("https://top.baidu.com/board?tab=realtime")
    soup = bs4.BeautifulSoup(response.text, "lxml")
    data = soup.find_all(name="a", class_="title_dIF3B")
    da=soup.find_all(name="a",class_="img-wrapper_29V76")
    #爬虫区
    #————————————————分————界————线——————————————————
    #算法区
    l1=[]
    l2=[]
    d={}
    try:
        #典型的给字典添加元素
        for n in data:
            l1.append(n.text)
        for n1 in da:
            l2.append(n1["href"])
        for i in range(max(len(l1),len(l2))):
            d[l1[i]]=l2[i]
        return d
    except:
        return "获取失败"

CSS、JS等起美化作用的和HTML没有展示

运行结果及报错内容

内部服务器错误
服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序出错。

我的解答思路和尝试过的方法

其实以前我还弄得三个音乐,占用了5M
我认为是因为内存太多导致的,但去掉5M后还报500错误,请问这是怎么回事

我想要达到的结果

不要报错就行

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2022-02-14 09:42
    关注

    get_news返回的字典,不是数组,做切片操作当然出错了,d改数组,然后改下index.html模板中的显示逻辑

    
    def get_news():
        import requests #导库不说了
        import bs4
        response = requests.get("https://top.baidu.com/board?tab=realtime")
        soup = bs4.BeautifulSoup(response.text, "lxml")
        data = soup.find_all(name="a", class_="title_dIF3B")
        da=soup.find_all(name="a",class_="img-wrapper_29V76")
        #爬虫区
        #————————————————分————界————线——————————————————
        #算法区
        l1=[]
        l2=[]
        d=[]
        try:
            #典型的给字典添加元素
            for n in data:
                l1.append(n.text)
            for n1 in da:
                l2.append(n1["href"])
            for i in range(max(len(l1),len(l2))):
                #d[l1[i]]=l2[i]
                d.append({'title':l1[i],'href':l2[i]})#########
            return d
        except:
            return "获取失败"
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月22日
  • 已采纳回答 2月14日
  • 创建了问题 2月14日

悬赏问题

  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?