웹 프레임 워크 템플릿의 고급 기능, 차단, JSON, 포장

플라스크 프레임 워크 구현 클래스

주형

<! DOCTYPE HTML > 
< HTML LANG = "EN" 의 xmlns = "http://www.w3.org/1999/html" > 
< 선두 > 
    < 메타 캐릭터 = "UTF-8" > 
    < 타이틀 > 제목 </ 타이틀 > 
< / 머리 > 
< > 
    < BR >显示数据< \ BR > 
    {{ID}} {{이름}} {{나이}} 
</ > 
</ HTML >

수입 로부터 IO가 가져 StringIO, BytesIO의 

D = { ' ID ' : 5, ' 이름 ' : ' ' , ' 나이 ' : 20 } 

클래스 템플릿 : 
    _pattern = ' {{([A-ZA-Z0-9 _] + )}} ' 
    정규식 = re.compile (_pattern) 

    @classmethod 
    DEF 렌더링 (CLS, 템플릿 데이터 : 딕셔너리) : 
        HTML = StringIO () 

        (개방 템플릿 인코딩 = 'UTF-8 " ) F :로
             위한 라인 에서 : F 
                시작 = 0 
                개행 = ' 
                에 대한 정규 : cls.regex.finditer (라인) 
                    개행 + = 라인 [START : matcher.start을 ()]
                     인쇄 (정합, 정합을 .group (1 ))  = matcher.group (1 ) 
                    TMP = data.get (키 ' ) 
                    개행 + = STR은 (TMP)이 
                    시작 =matcher.end ()
                 밖의 : 
                    개행 + = 라인 [START :] 
                html.write (개행) 
            인쇄 (html.getvalue ()) 
        html.close () #模板渲染 
파일명 = ' index.html을 ' 
Template.render (파일명 디)

jinja2

문서화 
공식 웹 사이트 HTTPS를 : //jinja.palletsprojects.com/en/2.10.x/ 
중국어 HTTP : //docs.jinkan.org/docs/jinja2/ 

설치가 
jinja2 설치마다 동시 
PIP가 markupsafe 설치

템플릿 건설

<! DOCTYPE HTML > 
< HTML LANG = "EN" > 
< 선두 > 
    < 메타 캐릭터 = "UTF-8" > 
    < 타이틀 > Magedu </ 타이틀 > 
</ 헤드 > 
< 본문 > 
< UL > 
        显示数据
    ID의 {% 이름 , 사용자 목록 % 연령} 
    < > {{loop.index}}, {{ID}}, {{이름}}, {{나이}} </ > 
    {% ENDFOR %} 
</ UL >
본체 > 
</ HTML >
################# ################### 아래로드 템플릿 코드 예제 
에서 Jinja2 가져 오기 환경, PackageLoader, FileSystemLoader의 

# ENV = 환경 (로더 = PackageLoader ( 'webarch', '템플릿')) #의 백 로더 
ENV = 환경 (= FileSystemLoader 로더 ( ' webarch / 템플릿 ' )) 

템플릿 = env.get_template ( ' index.html을 ' ) 

UserList에 = [ 
    ( . 3 ' TPM ' , 20이다 ), 
    ( . 4 ' ' , 23이다 ) 
    ( . 7 '자위대 ' , 23 ), 
    ( 1 ' aasf ' , 18 ) 
] 
D = { ' 사용자 목록 ' : 사용자 목록, ' USERCOUNT ' : LEN (사용자 목록)}
 인쇄 (template.render (** d))
############### 템플릿 모듈 ################## template.py 제공 
로부터 jinja2 오기 환경 PackageLoader, FileSystemLoader의 

ENV = 환경 (로더 = PackageLoader ( ' webarch ' , ' 템플릿 ' ))   #의 가방 로더 
# ENV = 환경 (로더 = FileSystemLoader ( 'webarch / 템플릿')) # 파일 시스템 로더 

DEF 렌더링 (이름, 데이터 : 딕셔너리) :
     " "" 
    템플릿 렌더링 
    : 매개 변수 이름 :이 템플릿의 파일 이름을 검색 할 수있는 템플릿 디렉토리 
    PARAM 데이터 : 데이터 사전 
    : 반환 : HTML 문자열 
    "" " 
    템플릿 = env.get_template (이름) #의 검색 모듈 인덱스입니다.HTML
    반환 template.render (** 데이터)
############## 코드가 증가 ################## 

#은 객체 생성 라우터 
IDX = 라우터 () 
Py를 = 라우터 ( ' / 파이썬 ' ) 
사용자 = 라우터 ( ' 사용자 / ' ) 

#의 등록 
App.register (IDX, Py를) 
App.register (사용자) 

py.register_preinterceptor (IP) 

@ user.get (R ' ^ /? $ ' )
 DEF의 userhandler ( 요청) 
    되는 UserList = [ 
        ( . 3 ' TPM ' , 20이다 ), 
        ( . 4 ' 헤트' , 23 ), 
        ( 7 ' 자위대 ' , 23 ), 
        ( 1 ' aasf ' , 18 ) 
    ] 
    D = { ' 사용자 목록 ' : 사용자 목록, ' USERCOUNT ' : LEN (사용자 목록)를}
     리턴 렌더링 ( ' index.html을 ' , d)

모듈 형

 

1 . 패킷 생성 webarch
 2 패키지 모듈에 .template.py을
 3 . Web.py 새로운 모듈 AttrDict, 라우터, 애플리케이션 클래스되는
 4 행 정의, 등록 코드 webarch 핸들러로 정의 / __init__의 평에서
 프로젝트의 루트 디렉토리 아래 5. 서버 코드가 시작 내부에 배치 app.py을 구축한다.

拦截器interceptor

#加入拦截器功能的方式
1、App和Router类直接加入
把拦截器的相关方法、属性分别添加到相关类中
实现简单
2、Mixin
App和Router类都需要这个拦截器功能,可以使用Mixin方式、将属性、方法组合进来,但是,App类拦截器适合使用第二种,但是Router的拦截器是每个实例不一样的,所以使用第一种方式实现

 

def fn(request:Request) -> Request:
    pass

 

def fn(request:Request,response:Response) -> Response:
    pass

IP拦截

 

#创建Router对象
idx = Router()
py = Router('/python')
user = Router('/user')

#注册
App.register(idx,py)
App.register(user)

#ip拦截
def ip(request:Request):
    print(request.remote_addr,'~~~~~')
    print(type(request.remote_addr))
    if request.remote_addr.startswith('192.'):
        return request
    else:
        return None #返回None将截断请求

py.register_preinterceptor(ip)

Json支持

@py.get(r'^/{id}$')
def pythonhandler(request):
    userlist = [
        (3, 'tom', 20),
        (5, 'jerry', 16),
        (6, 'sam', 23),
        (8, 'kevin', 18)
    ]
    d = {'userlist':userlist,'usercount':len(userlist)}
    res = Response(json=d)
    return res

总结

 

完整代码

。。。

추천

출처www.cnblogs.com/xiaoshayu520ly/p/11324628.html