---
id: 613ca940-0c67-4ad5-a571-83f582c480d8
slug: flask-getting-started
title: 工程 [2023_3_25] 附录文件「一」 - Flask 起步
summary: ""
status: published
tags: []
cover: ""
version: 1
slug_source: manual
slug_locked: true
published_at: "2023-03-26T15:21:24+08:00"
created_at: "2023-03-26T15:21:24+08:00"
updated_at: "2026-01-07T18:11:11+08:00"
---

## 前言
因为前段时间实验室老师要求我完成一个项目，是有关学校教务系统的，要求完成一个微信小程序。

目前处于实验阶段，老师也没有给我需求文档，所以目前的情况就是做些东西练练手。这里记录一下，之后正式工作了能快速完成基本的构建。

> 以下内容转载自 [Flask官方文档](https://flask.palletsprojects.com/en/2.2.x/quickstart/)
## Flask Installation
### Create an environment
Create a project folder and a venv folder within:
```bash
$ mkdir myproject
$ cd myproject
$ python3 -m venv venv
```
### Activate the environment

Before you work on your project, activate the corresponding environment:
```bash
$ . venv/bin/activate
```

### Install Flask

Within the activated environment, use the following command to install Flask:
```bash
$ pip install Flask
```

## Quickstart

A minimal Flask application looks something like this:

```python
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"
```

So what did that code do?

1. First we imported the ```Flask``` class. An instance of this class will be our WSGI application.

2. Next we create an instance of this class. The first argument is the name of the application’s module or package. ```__name__``` is a convenient shortcut for this that is appropriate for most cases. This is needed so that Flask knows where to look for resources such as templates and static files.

3. We then use the route() decorator to tell Flask what URL should trigger our function.

4. The function returns the message we want to display in the user’s browser. The default content type is HTML, so HTML in the string will be rendered by the browser.

Save it as ```hello.py``` or something similar. Make sure to not call your application ```flask.py``` because this would conflict with Flask itself.

To run the application, use the ```flask``` command or ```python -m flask```. You need to tell the Flask where your application is with the ```--app``` option.

```python
$ flask --app hello run
 * Serving Flask app 'hello'
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
```

### Externally Visible Server
If you run the server you will notice that the server is only accessible from your own computer, not from any other in the network. This is the default because in debugging mode a user of the application can execute arbitrary Python code on your computer.

If you have the debugger disabled or trust the users on your network, you can make the server publicly available simply by adding ```--host=0.0.0.0``` to the command line:

```python
$ flask run --host=0.0.0.0
```

This tells your operating system to listen on all public IPs.

### Debug
To enable debug mode, use the --debug option.
```python
$ flask --app hello run --debug
 * Serving Flask app 'hello'
 * Debug mode: on
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: nnn-nnn-nnn
```

### Routing
Modern web applications use meaningful URLs to help users. Users are more likely to like a page and come back if the page uses a meaningful URL they can remember and use to directly visit a page.

Use the ```route()``` decorator to bind a function to a URL.
```python
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
```

### HTTP Methods
Web applications use different HTTP methods when accessing URLs. You should familiarize yourself with the HTTP methods as you work with Flask. By default, a route only answers to ```GET``` requests. You can use the ```methods``` argument of the route() decorator to handle different HTTP methods.

```python
from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()
```

### The Request Object
The request object is documented in the API section and we will not cover it here in detail (see Request). Here is a broad overview of some of the most common operations. First of all you have to import it from the ```flask``` module:
```python
from flask import request
```
The current request method is available by using the method attribute. To access form data (data transmitted in a ```POST``` or ```PUT``` request) you can use the form attribute. Here is a full example of the two attributes mentioned above:
```python
@app.route('/login', methods=['POST', 'GET'])
def login():
    error = None
    if request.method == 'POST':
        if valid_login(request.form['username'],
                       request.form['password']):
            return log_the_user_in(request.form['username'])
        else:
            error = 'Invalid username/password'
    # the code below is executed if the request method
    # was GET or the credentials were invalid
    return render_template('login.html', error=error)
```
