python flask study

################### 1 MVC mode ###############
python flask study
MVC 流程:

用Hello.py函數最流程的控制-就是MVC中的contoller內容
Hello.py函數指定了一個路由函數app.route('/books/')
同時調用了 models中的book.py函數中的Book方法這是所謂的Model方法M
在執行好函數後,在前臺頁面的book-list.html展示這是所謂的V

代碼及目錄結構:
python flask study
Hello.py:

from flask import Flask,render_template
from models.book import Book
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')
@app.route('/books/')
def book_list():
    books = [
        Book('python flask',59.00),
        Book('Java flask',59.00),
        Book('Linux flask',59.00),
        Book('windows flask',59.00)
    ]
    return render_template('book-list.html',books=books)

if __name__ == '__main__':
    app.run(debug=True)
    # app自帶有個debug調式 修改完畢後 不用重啓服務器得到

Book.py:

class Book:
    def __init__(self, title,price):
        self.title = title
        self.price = price
    def __str__(self):
        return 'Book {}'.format(self.title)

Book-list.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>圖示列表</title>
        <link rel="stylesheet" type="text/css" href="../static/css/style.css"/>
    </head>
    <body>
        <h1>圖書列表</h1>
        <table border="1px" cellspacing="" cellpadding="3px">
            <tr>
                <td>書名</td>
                <td>定價</td>
            </tr>
            {% for book in books %}
            <tr>
                <td>{{book.title}}</td>
                <td>{{book.price}}</td>
            </tr>
            {% endfor %}
..爲了節省空間省略掉不必要部分

學習的點:
在html中讀取路由函數中過來的數據,當不知道多少數據量的情況下 可以用下面的方法:

{% for book in books %}
            <tr>
                <td>{{book.title}}</td>
                <td>{{book.price}}</td>
            </tr>
            {% endfor %}

在路由函數中,調用模板並傳遞函數:

@app.route('/books/')
def book_list():
    books = [
        Book('python flask',59.00),
        Book('Java flask',59.00),
    ]
    return render_template('book-list.html',books=books)

###########2 設置debug 模式的方法 #########
python flask study

Hello.py:
app = Flask(__name__)
app.config.from_object(config)

config.py:
DEBUG = True

########3 參數的基本寫法 #######

@app.route('/article/<id>')
# id是一個參數<>就是這個寫法
def article(id):
   return f'您請求的id是:{id}'

http://127.0.0.1:5000/article/dd 您請求的id是:dd

######### 4 URL 傳參數 #####

@app.route('/article/<id>')
# id是一個參數<>就是這個寫法
def article(id):
   return f'您請求的id是:{id}'

python flask study

######### 5 url 反轉 url_for ######
python flask study

@app.route('/')
def index():
   print(url_for("article",id='122345'))
   print(url_for("book_list"))
    # return render_template('index.html')
   return "hello world"
@app.route('/article/<id>/')
# id是一個參數<>就是這個寫法
def article(id):
   return f'您請求的id是:{id}'
@app.route('/books/')
def book_list():
url_for(),裏面顯示的是def的函數名稱,找到對應的路由

######## 6 url 重定向 redirect ####
python flask study

@app.route('/')
def index():
   login_url = url_for('login')
   return redirect(login_url)
   return "hello world"

@app.route("/login/")
def login():
   return f"這是登錄頁面"

@app.route("/question/<is_login>/")
def question(is_login):
   if is_login == "1":
      return '這是question頁面'
   else:
      return redirect(url_for("login"))
通過判斷is_login來解決是否登錄 同時是否需要重定向問題

######## 7 Template 渲染和參數 ######
python flask study

@app.route('/')
def index():
   class Person(object):
      name = f'李四'
      age = 36
   p = Person()

   context = {
      'username':'zhangsan',
      'age':18,
      'gender':"男",
     * 'personname':p,*
      'websites':{
         'baidu':'www.baidu.com',
         'sina':'www.sina.com'
      }
   }
   return render_template('index.html',other='argsper',**context)
   # 他主動回去template尋找
<body>
    <h1>優品課堂</h1>
   <p>
   <p>args: {{other}}</p>
   <p>用戶名: {{username}}</p>
   <p>年齡: {{age}}</p>
   <p>性別: {{gender}}</p>
   </p>
   <p>
   <hr>
      <p>另外的人員信息:</p>
      <p>姓名:{{personname.name}}</p>
      <p>姓名:{{personname['name']}}</p>
      <p>年齡:{{personname.age}}</p>
   </p>
   <hr>
   <p>百度:{{websites.baidu}}</p>
   <p>百度:{{websites['baidu']}}</p>
   <p>新浪:{{websites.sina}}</p>
   <p>新浪:{{websites['sina']}}</p>
</body>

######### 8 Flask if else #####
python flask study

@app.route('/<is_login>/')
def index(is_login):
   if is_login == '1':
      user = {
         'username':f"黃羣",
         'age':50
      }
      return render_template('index.html',users=user)
   else:
      return render_template('index.html')

html

<body>
    <h1>優品課堂</h1>
   {% if users and users.age > 18 %}
      <a href="#">{{ users.username }}</a>
      <a href="#">註銷</a>
   {% else %}
      <a href="#">登錄</a>
      <a href="#">註冊</a>
   {% endif %}
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章