Python 我不明白为什么css文件;signin.css“;我的烧瓶应用程序找不到。错误-“;GET/signin.css HTTP/1.1“;404 -
(Python文件) 这是python Flask文件 我不认为这有什么问题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 =
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
文件夹中。你需要让我走