利用Python实现后端写网页是一种基于Web框架的开发方式,其中Flask框架是一种轻量级的Web框架,非常适合小型应用程序开发。以下是完整的攻略:
准备工作
- 安装Python编程环境,建议使用Python 3版本。
- 安装Flask框架,可以使用以下命令进行安装:
pip install flask
3. 安装其他需要的扩展包,如flask-wtf、flask-login、flask-mail等,可以使用pip进行安装。
创建Flask应用程序
- 导入Flask模块
from flask import Flask
2. 创建app
变量并指定应用程序名称
app = Flask(__name__)
3. 添加路由和视图函数,定义处理请求的方法和返回响应数据的方法。例如:
@app.route('/')
def index():
return 'Hello, World!'
4. 启动应用程序
if __name__ == '__main__':
app.run()
Flask应用程序的结构
- 创建一个基本的文件结构。例如:
myapp/
├── myapp/
│ ├── __init__.py
│ ├── views.py
│ ├── models.py
│ ├── forms.py
│ ├── templates/
│ │ ├── base.html
│ │ ├── index.html
│ ├── static/
│ │ ├── css/
│ │ │ ├── style.css
│ │ ├── js/
│ │ ├── img/
├── tests/
├── setup.py
├── README.md
├── LICENSE
其中:
- myapp/
:项目的根目录。
- myapp/__init__.py
:应用程序的初始化文件。
- myapp/views.py
:包含所有视图函数的文件。
- myapp/models.py
:包含数据库模型的文件。
- myapp/forms.py
:包含表单类的文件。
- myapp/templates/
:包含应用程序的HTML模板文件。
- myapp/static/
:包含应用程序的静态资源文件,如图片、CSS和JavaScript文件。
- tests/
:包含测试文件。
- setup.py
:包含应用程序的安装信息。
- README.md
:应用程序的说明文档。
- LICENSE
:应用程序的许可证信息。
- 在
myapp/__init__.py
文件中添加以下内容:
```
from flask import Flask
from .views import bp
def create_app(config_name=None):
app = Flask(name)
app.config.from_object(config_name or 'config.DevelopmentConfig')
app.register_blueprint(bp)
return app
``
create_app()
其中:
-函数用于创建Flask应用程序对象。
config_name
-参数用于指定应用程序的配置文件名,可以设置为
DevelopmentConfig、
TestingConfig或
ProductionConfig。
app.register_blueprint()`方法用于注册子应用程序。
-
- 在
myapp/views.py
文件中添加以下内容:
```
from flask import Blueprint, render_template
bp = Blueprint('main', name)
@bp.route('/')
def index():
return render_template('index.html')
``
Blueprint()
其中:
-函数用于创建蓝图对象。
render_template()
-函数用于渲染HTML模板。
bp.route()`装饰器用于将视图函数绑定到指定的URL路径上。
-
- 在
myapp/templates/index.html
文件中添加以下内容:
```
Hello, World!
```
这是一个最简单的HTML文档,可以在浏览器中打开查看效果。
- 启动应用程序
if __name__ == '__main__':
app = create_app()
app.run()
示例1:注册和登录功能
这是一个简单的注册和登录功能示例,包括以下步骤:
- 在
myapp/models.py
文件中定义用户模型类:
```
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
class User(UserMixin, db.Model):
tablename = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(128), nullable=False)
def __init__(self, username, email, password):
self.username = username
self.email = email
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
```
其中:
- UserMixin
类提供了默认的用户模型类,包含了登录和访问控制功能。
- generate_password_hash()
和check_password_hash()
方法用于加密和解密用户密码。
- 在
myapp/forms.py
中定义注册和登录表单类:
```
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, Length
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Sign Up')
class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
remember = BooleanField('Remember Me')
submit = SubmitField('Login')
```
其中:
- FlaskForm
是WTForms
模块中的一个基类,用于创建表单类。
- StringField
和PasswordField
类用于创建输入字段。
- SubmitField
类用于创建提交按钮。
- validators
参数用于配置输入字段的验证规则。
- 在
myapp/views.py
中添加注册和登录视图函数:
```
from flask import Blueprint, render_template, redirect, url_for, flash
from flask_login import login_user, logout_user, login_required, current_user
from .forms import LoginForm, RegistrationForm
from .models import db, User
auth_bp = Blueprint('auth', name)
@auth_bp.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
user = User(username=form.username.data, email=form.email.data, password=form.password.data)
db.session.add(user)
db.session.commit()
flash('Your account has been created!', 'success')
return redirect(url_for('auth.login'))
return render_template('register.html', title='Register', form=form)
@auth_bp.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user and user.check_password(form.password.data):
login_user(user, remember=form.remember.data)
next_page = request.args.get('next')
return redirect(next_page or url_for('main.index'))
else:
flash('Login unsuccessful. Please check email and password', 'danger')
return render_template('login.html', title='Login', form=form)
@auth_bp.route('/logout')
@login_required
def logout():
logout_user()
return redirect(url_for('main.index'))
```
其中:
- render_template()
函数用于渲染HTML模板。
- redirect()
函数用于重定向到指定路由。
- url_for()
函数用于获取指定视图函数的URL路径。
- flash()
函数用于显示一个信息提示框。
- login_user()
函数用于将用户登录。
- logout_user()
函数用于将用户登出。
- login_required()
修饰器用于限制只能已经登录的用户访问指定路由。
- 在
myapp/templates
中添加HTML模板文件和相关CSS、JS文件。
示例2:发送邮件功能
这是一个简单的发送邮件功能示例,包括以下步骤:
- 在
myapp/__init__.py
文件中添加邮件配置信息:
app.config['MAIL_SERVER'] = 'smtp.googlemail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('EMAIL_USER')
app.config['MAIL_PASSWORD'] = os.environ.get('EMAIL_PASSWORD')
其中EMAIL_USER
和EMAIL_PASSWORD
是你的邮箱账号和密码。
- 在
myapp/views.py
文件中添加发送邮件函数:
```
from flask_mail import Message, Mail
mail = Mail(app)
def send_email(to, subject, template):
msg = Message(
subject,
recipients=[to],
html=template,
sender='noreply@myapp.com'
)
mail.send(msg)
``
Mail()
其中:
-类用于创建邮件对象。
Message()
-类用于创建邮件的消息体。
send_email()`函数用于发送邮件。
-
- 在
myapp/views.py
文件中添加发送邮件视图函数:
```
from .forms import ContactForm
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if form.validate_on_submit():
send_email(form.email.data, 'New Message from Myapp', 'contact', form=form)
flash('Your message has been sent!', 'success')
return redirect(url_for('main.index'))
return render_template('contact.html', form=form)
``
send_email()
其中:
-函数用于发送邮件。
ContactForm`类用于创建发送邮件的表单。
-
- 创建
myapp/templates/contact.html
模板文件和发送邮件后的成功页面。
以上就是利用Python实现后端写网页(Flask框架)的完整攻略,两个示例分别是注册和登录功能以及发送邮件功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用python实现后端写网页(flask框架) - Python技术站