编写 webapp 程序和模板实现登陆页面 login 和主页 homepage,要求使用消息闪现提示登陆成功或失败,登陆页面和主页中需要显示一张静态图片。然后在代码中使用宏和模板继承改写代码
时间: 2024-12-02 12:19:53 浏览: 18
编写Web应用程序通常涉及前端和后端两部分。首先,我们创建一个简单的登录页(login.html)和主页(homepage.html),并使用模板语言如HTML、CSS和JavaScript以及一些轻量级框架(如Bootstrap)来实现样式和交互。
**login.html**
```html
<!DOCTYPE html>
<html lang="zh">
<head>
<title>登录</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container mt-5">
<form id="loginForm" action="/api/login" method="POST">
<input type="text" name="username" placeholder="用户名" required>
<input type="password" name="password" placeholder="密码" required>
<button type="submit" class="btn btn-primary">登录</button>
</form>
<div id="messageFlash" style="display:none;"></div>
</div>
<script>
// JavaScript for handling login and message flashing
</script>
</body>
</html>
```
**homepage.html**
```html
<!DOCTYPE html>
<html lang="zh">
<head>
<title>主页</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<img src="static/homepage-image.jpg" alt="主页图片">
</head>
<body>
<nav class="navbar navbar-light bg-light">
<a href="#" class="navbar-brand">欢迎已登录用户</a>
</nav>
<!-- ...其他内容... -->
</body>
</html>
```
在服务器端(例如Python Flask或Django),你可以使用模板引擎如Jinja2处理动态内容:
**server.py (Flask示例)**
```python
from flask import Flask, render_template, request, redirect
app = Flask(__name__)
app.jinja_env.globals.update({ 'show_message': show_message })
@app.route('/')
def homepage():
return render_template('homepage.html', image_url='static/homepage-image.jpg')
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
if check_credentials(username, password): # 假设check_credentials是一个验证函数
session['logged_in'] = True
return redirect('/')
else:
return show_message('登录失败', 'danger') # 使用自定义函数显示消息
def show_message(message, severity='info'):
flash = {
'message': message,
'severity': severity,
'is_hidden': True # 初始隐藏
}
return {'flash': flash}
if __name__ == '__main__':
app.run()
```
在这个例子中,`show_message`是一个辅助函数,用于渲染包含消息闪现的模板。通过`render_template`返回一个响应,并将`message_flash`传递给模板,以便在前端显示。
至于使用宏和模板继承,如果你使用的是像Django这样的框架,可以这样组织文件结构:
**base.html**
```html
<!-- base template with common elements like nav bar -->
```
**macros.html**
```html
{% macro show_message(message, severity='info') %}
{% set is_hidden = not get_flashed_messages(with_categories=true)[0].category == severity %}
<div id="messageFlash" {% if is_hidden %}style="display:none;"{% endif %}>
{{ get_flashed_messages()[0] }}
</div>
{% endmacro %}
```
**login.html (extends base.html)`
```html
{% extends "base.html" %}
{% block content %}
...
{% include "macros.html" %}
...
{% endblock %}
```
阅读全文