Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我不明白为什么css文件;signin.css“;我的烧瓶应用程序找不到。错误-“;GET/signin.css HTTP/1.1“;404 -_Python_Html_Css_Flask - Fatal编程技术网

Python 我不明白为什么css文件;signin.css“;我的烧瓶应用程序找不到。错误-“;GET/signin.css HTTP/1.1“;404 -

Python 我不明白为什么css文件;signin.css“;我的烧瓶应用程序找不到。错误-“;GET/signin.css HTTP/1.1“;404 -,python,html,css,flask,Python,Html,Css,Flask,(Python文件) 这是python Flask文件 我不认为这有什么问题 from flask import Flask, render_template, request from flask_sqlalchemy import SQLAlchemy from flask_mail import Mail import json from datetime import datetime with open('config1.json', 'r') as c: params =

(Python文件) 这是python Flask文件 我不认为这有什么问题

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
import json
from datetime import datetime


with open('config1.json', 'r') as c:
    params = json.load(c)["params"]

local_server = True
app = Flask(__name__)
app.config.update(
    MAIL_SERVER = 'smtp.gmail.com',
    MAIL_PORT = '465',
    MAIL_USE_SSL = True,
    MAIL_USERNAME = params['gmail-user'],
    MAIL_PASSWORD=  params['gmail-password']
)
mail = Mail(app)
if(local_server):
    app.config['SQLALCHEMY_DATABASE_URI'] = params['local_uri']
else:
    app.config['SQLALCHEMY_DATABASE_URI'] = params['prod_uri']

db = SQLAlchemy(app)


class Contacts(db.Model):
    sno = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    phone_num = db.Column(db.String(12), nullable=False)
    msg = db.Column(db.String(120), nullable=False)
    date = db.Column(db.String(12), nullable=True)
    email = db.Column(db.String(20), nullable=False)


class Posts(db.Model):
    sno = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80), nullable=False)
    slug = db.Column(db.String(21), nullable=False)
    content = db.Column(db.String(120), nullable=False)
    tagline = db.Column(db.String(120), nullable=False)
    date = db.Column(db.String(12), nullable=True)
    img_file = db.Column(db.String(12), nullable=True)


@app.route("/")
def home():
    posts = Posts.query.filter_by().all()[0:params['no_of_posts']]
    return render_template('index.html', params=params, posts=posts)


@app.route("/post/<string:post_slug>", methods=['GET'])
def post_route(post_slug):
    post = Posts.query.filter_by(slug=post_slug).first()
    return render_template('post.html', params=params, post=post)

@app.route("/about")
def about():
    return render_template('about.html', params=params)



                                 #this is the root for login.html(end point)
@app.route("/dashboard",methods=['GET','POST'])
def dashboard():
    return render_template('login.html', params=params)



@app.route("/contact", methods = ['GET', 'POST'])
def contact():
    if(request.method=='POST'):
        name = request.form.get('name')
        email = request.form.get('email')
        phone = request.form.get('phone')
        message = request.form.get('message')
        entry = Contacts(name=name, phone_num = phone, msg = message, date= datetime.now(),email = email )
        db.session.add(entry)
        db.session.commit()
        mail.send_message('New message from ' + name,
                          sender=email,
                          recipients = [params['gmail-user']],
                          body = message + "\n" + phone
                          )
    return render_template('contact.html', params=params)


app.run(debug=True)
从烧瓶导入烧瓶,呈现模板,请求
从flask_sqlalchemy导入sqlalchemy
从电子邮件导入邮件
导入json
从日期时间导入日期时间
将open('config1.json','r')作为c:
params=json.load(c)[“params”]
本地服务器=True
app=烧瓶(名称)
app.config.update(
邮件服务器='smtp.gmail.com',
邮件端口='465',
邮件使用SSL=True,
MAIL_USERNAME=params['gmail-user'],
MAIL_PASSWORD=params['gmail-PASSWORD']
)
邮件=邮件(应用程序)
如果(本地_服务器):
app.config['SQLALCHEMY\u DATABASE\u URI']=params['local\u URI']
其他:
app.config['SQLALCHEMY\u DATABASE\u URI']=params['prod\u URI']
db=SQLAlchemy(应用程序)
类别联系人(db.Model):
sno=db.Column(db.Integer,主键=True)
name=db.Column(db.String(80),null=False)
phone_num=db.Column(db.String(12),nullable=False)
msg=db.Column(db.String(120),nullable=False)
date=db.Column(db.String(12),null=True)
email=db.Column(db.String(20),null=False)
班级职位(db.Model):
sno=db.Column(db.Integer,主键=True)
title=db.Column(db.String(80),null=False)
slug=db.Column(db.String(21),nullable=False)
content=db.Column(db.String(120),nullable=False)
tagline=db.Column(db.String(120),nullable=False)
date=db.Column(db.String(12),null=True)
img_file=db.Column(db.String(12),nullable=True)
@附件路线(“/”)
def home():
posts=posts.query.filter_by().all()[0:params['no_of_posts']]
返回呈现模板('index.html',params=params,posts=posts)
@app.route(“/post/”,方法=['GET'])
def post_管线(post_段塞):
post=Posts.query.filter_by(slug=post_slug.first())
返回呈现模板('post.html',params=params,post=post)
@app.route(“/about”)
def about():
返回呈现模板('about.html',params=params)
#这是login.html的根目录(端点)
@app.route(“/dashboard”,方法=['GET','POST']))
def仪表板():
返回呈现模板('login.html',params=params)
@app.route(“/contact”,methods=['GET','POST']))
def contact():
if(request.method=='POST'):
name=request.form.get('name')
email=request.form.get('email')
phone=request.form.get('phone')
message=request.form.get('message')
条目=联系人(姓名=姓名,电话号码=电话,消息=信息,日期=日期时间。现在(),电子邮件=电子邮件)
db.session.add(条目)
db.session.commit()
mail.send_message('newmessagefrom'+name,
发件人=电子邮件,
收件人=[params['gmail-user']],
正文=信息+“\n”+电话
)
返回呈现模板('contact.html',params=params)
app.run(debug=True)
HTML文件 (login.html) 这是我认为最主要的问题 事实上,我正在从Harry youtube频道学习wed dev 烧瓶教程#14 我认为有一个小错误,我没有得到 也许你的经验能找到答案

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../../../favicon.ico">

    <title>Signin Template for Bootstrap</title>

    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">


    <!-- Custom styles for this template -->
    <link href="signin.css" rel="stylesheet">
  </head>

  <body class="text-center">

 <link href="{{ url_for ('static', filename='css/signin.css') }}" rel="stylesheet">
 
    <form class="form-signin" action="/dashboard" method="post">
      {% set fname = 'img/'+  params['login_image']  %}
      <img class="mb-4" src="{{url_for('static', filename=fname)}}" alt="" width="72" height="72">
      <h1 class="h3 mb-3 font-weight-normal">Admin Login</h1>
      <label for="inputEmail" class="sr-only">Email address</label>
      <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
      <label for="inputPassword" class="sr-only">Password</label>
      <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
      <div class="checkbox mb-3">
        <label>
          <input type="checkbox" value="remember-me"> Remember me
        </label>
      </div>
      <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
      <p class="mt-5 mb-3 text-muted">© {{params['blog_name'] }} 2017-2018</p>
    </form>


 </body>
</html>

引导的登录模板
{%set fname='img/'+params['login_image']%}
管理员登录
电子邮件地址
密码
记得我吗
登录

{{params['blog_name']}2017-2018


您正在加载CSS文件两次。一次在
标记下方,一次在上面几行

有两个问题:

首先,CSS文件应该只加载一次,并在
标记中加载。因此,第一个
标记位于正确的位置。但是

。。。其次,在第一个
标记中,您没有对静态文件使用
{{url\u for(…)}}
语法这是必要的

换言之:

  • 使用
    signin.css在第一行中使用
    {{url\u for(…)}}
    函数
  • 使用
    signin.css
    删除第二行


当您将静态文件的
{{url\u for(…)}}
函数省略时,浏览器将尝试访问url路径
/signin.css
。然后,该路径将进入
flask
,并尝试查找匹配的URL“路由”。对于像JS或CSS这样的静态文件,您不需要添加
@route(…)
装饰器,而是将它们放入
static
文件夹中。您需要让flask使用
{{URL\u for('static',filename)}}
模式来确定静态文件的正确URL。

您将加载CSS文件两次。一次在
标记下方,一次在上面几行

有两个问题:

首先,CSS文件应该只加载一次,并在
标记中加载。因此,第一个
标记位于正确的位置。但是

。。。其次,在第一个
标记中,您没有对静态文件使用
{{url\u for(…)}}
语法这是必要的

换言之:

  • 使用
    signin.css在第一行中使用
    {{url\u for(…)}}
    函数
  • 使用
    signin.css
    删除第二行

当您将静态文件的
{{url\u for(…)}}
函数省略时,浏览器将尝试访问url路径
/signin.css
。然后,该路径将进入
flask
,并尝试查找匹配的URL“路由”。对于像JS或CSS这样的静态文件,您不需要添加
@route(…)
装饰器,而是将它们放入
static
文件夹中。你需要让我走