플라스크에 기초 파이썬 학습

무엇 플라스크 것은?
플라스크는 웹 프레임 워크는 웹 응용 프로그램을 구축 할 수 있습니다. 웹 응용 프로그램을 허용하는 도구, 라이브러리 및 기술을 제공하는 것입니다
웹 페이지, 블로그, 위키, 웹 기반 캘린더 응용 프로그램 또는 비즈니스 웹 사이트의 일부가 될 수 있습니다.
플라스크에 의존하는 모듈 :
웹 서비스 게이트웨이 인터페이스 (파이썬 웹 서버 게이트웨이 인터페이스, WSGI로 축약
WERKZEUG WSGI 웹 서버 및 웹 응용 프로그램 또는 프레임 워크 사이에 정의 된 파이썬 언어 키트
간단하고 보편적 인 변명의 종류, 기타 언어는 유사한 인터페이스)가
jinja2 템플릿 엔진을

플라스크의 장점

이 카테고리의 마이크로 프레임 워크 (마이크로 프레임 워크) 속하며 플라스크, 일반적으로 작은 마이크로 아키텍처는 외부 라이브러리 프레임 워크에 의존하지 않는
경량 프레임 워크 것은
시간을 달려 업데이트는
보안 버그에 초점을 맞추고

제 플라스크 절차

from flask import Flask
app = Flask(__name__)  #导入Flask对象

@app.route('/')    #把修饰的函数注册为路由
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

변수 규칙

의 URL에 추가 변수 섹션을 지정, 당신은 이러한 특수 문자가 <VARIABLE_NAME>의이 부분에 대한 귀하의 함수 이름에 매개 변수로 전달됩니다 표시 할 수 있습니다

from flask import  Flask
app = Flask(__name__)  #创建对象

@app.route('/')
def hello_world():
    return 'Hello World'

@app.route('/user/<username>')
def show_user_profile(username):
    # 显示该用户名的用户信息
    return 'User %s'  % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # 根据ID显示文章,ID是整型数据
    return 'Post %d'  % post_id

if __name__ == '__main__':
    app.run()

에 수정 브라우저 주소에서 실행 프로그램 http://127.0.0.1:5000/user/ 기록이
표시됩니다
플라스크에 기초 파이썬 학습

URL의 건설

플라스크가 URL과 일치 할 수 있다면, 다음에 기능을 지정하는 url_info ()를 사용하여
URL에 변수 부분에 해당하는 명명 된 매개 변수의 규칙을 수락, 그는 첫 번째 인수로 함수 이름을 수신 빌드 URL을 알 수없는 변수 부분은 URL에 추가됩니다 쿼리 매개 변수로 끝

from flask import Flask , url_for
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/user/<username>')
def show_user_profile(username):
    # 显示该用户名的用户信息
    return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # 根据ID显示文章,ID是整型数据
    return 'Post %d' % post_id

@app.route('/url/')
def get_url():
    # 根据ID显示文章,ID是整型数据
    return url_for('show_post',post_id=2)

if __name__ == '__main__':
    app.run(debug=True)

액세스 URL을 브라우저 :
플라스크에 기초 파이썬 학습

템플릿을 렌더링

사용자가 프로그램의 루트 주소를 액세스 할 때, 승객의 기능을 우리의 견해
HTML 코드의 - 측 문 리턴 라인. 그러나 전체 HTML 페이지는 종종 수십 필요
당신이보기에 함수를 작성한 경우 선이나 코드 라인의 수백을, 정말 악몽입니다. 이러한
코드는 또한 간단하고 HTML 코드는 별도의 텍스트에 저장하는 올바른 방법이 유지도 어렵고
, 부재되도록 비즈니스 로직 및 프리젠 테이션 로직 별도의 절차, 즉 제어 및 사용자 인터페이스
분리.
동적 웹 애플리케이션에서보기 함수가 반환 된 HTML 데이터는 종종 필요 대응
(예 : 쿼리 매개 변수)를 동적으로 생성 된 변수. HTML 코드는 별도의 파일을 저장할 때
, 우리는 다시 사용할 수없는 문자열 연결 문자열 포맷 또는 방식을 HTML 코드에서
변수에 삽입 한 후 우리는 템플릿 엔진 (템플릿 엔진)을 사용합니다. 주형으로
플레이트 엔진, 우리는 변수, 예컨대가 표시되는 HTML 파일의 특정 문법을 사용하여
고정 된 부분과 템플릿 재사용 (템플릿)이라 불리는 동적 콘텐츠 파일을 포함한다.
판독 전용 신택스 표기법 템플릿을 실행하고, 따라서 통과에 템플릿 기관의 역할
가변 데이터로 최종 HTML 페이지의 출력의 실제 값으로 대체된다.이 프로세스는 공지되어있다
(렌더링)를 렌더링한다. 플라스크 기본 템플릿 엔진은 함수, Jinja2입니다
변수를 설정하는 것 외에도, 파이썬 템플릿 엔진을 완료 할 수뿐만 아니라, 경우에 우리가 템플릿에 추가 할 수 있습니다
판결 등 반복, 전화 기능을 위해 수행되는 템플릿의 출력을 제어하는 다양한 방법, . 들어
Jinja2 템플릿은 HTML, XML, 같은 형식의 일반 텍스트 파일이 될 수
등 CSV, 유액,

템플릿 만들기 파일 폴더, 다음 두 파일을 index.html이라는를 만든 다음 render.py 렌더링 템플릿을 user.html

render.py

from flask import  Flask, render_template
app= Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('index.html',name='经验')

@app.route('/user/<username>')
def show_user_profile(username):
    # 显示该用户名的用户信息
    return render_template('user.html', name=username)

if __name__ == '__main__':
    app.run(debug=True)

user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello, {{ name }}!</h1>

</body>
</html>

index.html을

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>hello {{ name }} </h1>

</body>
</html>

브라우저 :
플라스크에 기초 파이썬 학습
플라스크에 기초 파이썬 학습

템플릿 구문

이러한 템플릿을 이용 Jinja2 엔진, 우리는 프로그램 로직 다이의 일부를 넣을 수
에 플레이트. 간단하게 우리가 조작하는 템플릿에 파이썬 구문과 표현을 사용할 수 있습니다 넣어
출력 데이터를. 그러나 Jinja2 모든 파이썬 구문을 지원하지 않는 점에 유의. 그리고
효율성과 코드 구성의 고려 사항을 위해, 우리는 적절한 템플릿 및 출력 만 사용해야
템플릿으로 운영과 관련된 제어 로직을.
Jinja2는 같은 문자열, 열, 등, 템플릿에 파이썬 객체의 대부분을 사용할 수 있습니다
테이블, 사전, 튜플, 정수, 부동 소수점, 부울 값입니다. 이것은 기본적인 산술 부호 지원
(== 예, = 등!), 논리 심볼 - (*, / 등 +), 비교 (그리고,
OR 및 NOT 괄호) 및 예약 (,없는 것도 및 부울 참, 거짓).
Jinja2 템플릿의 구조체의 다양한 제어 출력을 제공하며, 가장 일반적으로 사용하는 경우, 상기
두. Jinja2에서 문은 {% ... %} 언어, 특히, 주목해야한다 식별 사용
: 문장의 끝, 우리는 닫는 태그를 추가해야합니다
{% user.bio % IF}를
<I> {{user.bio }} </ 나는>
{%} % 다른
<I>이 사용자 A가. </ I> 바이오가 제공되지 않음
{%} ENDIF %

user.bio이 이미 렌더링 {% user.bio % 경우}과 정의 된 경우이 문 경우
, {% 다른 사람 %}간에 콘텐츠 그렇지 않으면 렌더링 {% 다른 사람 %}와 {% ENDIF %} 사이 기본 콘텐츠. if 문 명령문의 끝과 끝 {%의 ENDIF %}는,이 라인은 생략 할 수 없습니다.
반복 문장의 순서에 사용되는, 파이썬에서와 같이
<UL>
영화에서 영화에 대한 {%} %
<리> movie.name {{}} - {{}} movie.year </ 리>
{% ENDFOR } %
</ UL>

jinja2 템플릿 엔진

1. Jinja2 템플릿 엔진은 무엇입니까?

  • 공식 웹 사이트 : http://docs.jinkan.org/docs/jinja2/
    Jinja2는 현대, 디자이너 친화적 인, 파이썬 장고 템플릿 언어 템플릿을 모델이다. 그것은 빠르고, 널리 사용되는, 그리고 안전을 보장 할 수있는 옵션 템플릿 샌드 박스 실행 환경을 제공합니다 :
  • . 1) 웹 파이썬 개발, 본질적으로 비즈니스 로직 (내용보기 기능) 및 논리적 페이지 (HTML 조각) 떨어져, 그래서 이해하고 유지하기 위해 쉽게 코드의 가독성, 코드를 향상시킬 것을;
  • 2) 템플릿 렌더링 : 동적 할당을 통해 표시되는 HTML 파일에 다시 번역 HTML 파일 (발효 템플릿 엔진)이 유저에게 처리를 반환 할 것이다.
  • 3) 다른 템플릿 엔진 :. 마코, 템플릿, Jinja2

2. Jinja2 문법

Jinja2 변수 표시 구문 :

{{변수 명 |}} 함수 호출

이름 {{}}
{{url_for ()}}
{{get_flshed_messages ()}}

Jinja2 변수는 내장 된 필터 :

"안녕하세요".lower ()

safe            渲染值时不转义
capitalize      把值的首字母转换成大写,其他字母转换成小写
lower           把值转换成小写形式
upper           把值转换成大写形式
title           把值中每个单词的首字母都转换成大写
trim            把值的首尾空格去掉
striptags       渲染之前把值中所有的 HTML 标签都删掉

어떻게 사용자 정의 필터?

루프 :

        {% for i in li%}
            xxx
        {% endfor %}

는 IF 문

        {% if user == 'westos'%}
            xxxx
        {% elif user == 'hello' %}
            xxx
        {% else %}
            xxx
        {% endif%}

매크로 작업

  • 동등한 기능

    어떻게 매크로를 정의?

        <!--相当于python里面的定义函数, 后面使用的场景: 分页显示-->
        {%  macro render(id) %}
            <h1>hello world {{ id }}</h1>
        {% endmacro %}

어떻게 매크로를 호출?

    <!--调用定义好的宏(类似于python中的函数)-->
    {{ render(1) }}
    {{ render(2) }}
    {{ render(3) }}

포함 운영을 포함

  • 사용 방법 : {% 포함 "06_inclued.html"%}

템플릿 상속 :

그리고 맨 아래에있는 일반 사이트 탐색 바는 네비게이션 정보를 다시 작성 피하기 위해, 변경되지 않습니다;

  • 어떻게 템플릿을 정의?
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}  {% endblock %}</title>
</head>
<body>
<div style="width: 100px; height: 200px" > 这是导航栏</div>
{% block body %}
hello
{% endblock %}
<div style="width: 100px; height: 200px" >这是底部</div>
</body>
</html>

- 如何继承基模板?

{% extends  '06_base.html'%}
{% block title %}
    继承案例
{% endblock %}
{% block body %}
<span style="color: green">这是最新填的block内容</span>
{% endblockfrom flask  import  Flask, render_template

예 : 템플릿 상속 평 :

app = Flask(__name__)
@app.route('/')
def index():
    return  render_template('index.html')

@app.route('/bbs/')
def bbs():
    return  render_template('bbs.html')

@app.route('/blog/')
def blog():
    return  render_template('blog.html')
if __name__ == '__main__':
    app.run(port=5002) %}

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %} {% endblock %}</title>
    <style>
        .nav{
            width: 100%;
            height: 50px;
            border: 1px solid red;
        }
        .left{
            width: 20%;
            border: 1px solid red;
            float: left;
            height: 100px;
        }

        .right{
            width: 79%;
             border: 1px solid green;
            float: left;
            height: 100px;
        }
    </style>
</head>
<body>

<div class="nav">
    导航栏
    <button>登录</button>
    <button>注册</button>
</div>

<div class="left">
    {% include 'left.html' %}

</div>

<div class="right">
    {% block body %}

    {% endblock %}
</div>

</body>
</html>

bbs.html

{% extends 'base.html' %}

{% block title %}

论坛
{% endblock %}
{% block body %}
<h1>bbs</h1>

blog.html

{% extends 'base.html' %}
{% block title %}

博客
{% endblock %}

{% block body %}
<h1>blog</h1>

index.html을

{% extends 'base.html' %}

{% block title %}

主页
{% endblock %}
{% block body %}
<h1>index</h1>

left.html

<ul>
    <li>新闻</li>
    <li>财经</li>
    <li>八卦</li>
<url>

추천

출처blog.51cto.com/13810716/2473591