Python 초보자가 Bottle을 사용해 보면 의외로 쉽게 움직여 주었다

소개



자신의 메모입니다, 경위는 아래.
  • 1주일 전 정도부터 Python 시작해, 서버로 무엇인가 움직이고 싶어졌다.
  • 웹 프레임워크의 종류를 조사해 보았다.
  • Django가 제일 인기라고 할까 틀림없다, 하지만 초보자에게는 조금 허들 높아 보인다.
  • 갑자기 좌절하고 싶지 않기 때문에, 일단 초보자용 같은 Bottle을 선택.


  • 실행 환경


  • OS X 10.9.5
  • 파이썬 3.5.1
  • PyCharm Community Edition 2016.1.2

  • 하고 싶은 일


  • 우선 움직여 보자.
  • 다이나믹한 라우팅을 해본다
  • 수신 된 매개 변수 사용
  • 파라미터에 제약을 준다

  • GET, POST 해 보자
  • 오류 페이지 표시

  • 했던 일



    우선 움직여 보자.



    어려운 것은 생각하지 않고, 우선은 브라우저에서 Hello World가 표시되는 곳까지 해 본다.
    #importするためにpip installしておく
    $ pip install bottle
    
    # -*- coding:utf-8 -*-
    
    from bottle import route, run
    
    
    @route('/hello')
    def hello():
        return "Hello World!"
    
    
    run(host='localhost', port=8080, debug=True)
    

    PyCharm에서 Run하고 브라우저에서 열어보세요.
    http://localhost:8080/hello



    이것만으로 Hello World가 브라우저에서 볼 수 있게 되었다!! 대단한 Bottle

    역동적 인 라우팅을 시도합니다.


    # -*- coding:utf-8 -*-
    
    from bottle import route, run
    
    
    @route('/hello/')
    @route('/hello/<user>')
    def hello(user="taro"):
        return "Hello {user}".format(user=user)
    
    
    @route('/date/<month:re:[a-z]+>/<day:int>/<path:path>')
    def date(month, day, path):
        return "{month}/{day} {path}".format(month=month, day=day, path=path)
    
    
    run(host='localhost', port=8080, debug=True)
    

    받은 매개변수 사용



    실행되는 메소드의 인수에 디폴트를 정의해 두는 것으로 user가 건네받지 않을 때에도 표시할 수 있다.
    http://localhost:8080/hello/


    http://localhost:8080/hello/masaibar


    파라미터에 제약을 준다



    간단한 값 제약을 줄 수 있습니다.
  • re 정규식
  • int int 값
  • path/를 경로의 일부로 인식합니다.

    http://localhost:8080/date/april/29//dev/null


    GET, POST 해보기



    GET이나 POST등의 어노테이션에는 2 종류의 쓰는 방법이 있는 것 같다.
    @get ('/hoge') 와 @route ('/hoge', method='GET') 는 같은 동작을 한다.

    전달 된 값은 다음 변수를 참조하여 수신됩니다.
  • GET 요청의 경우 request.query
  • POST 요청의 경우 request.forms

  • 그 밖에도 헤더나 리퀘스트 본문 등 여러가지 데이터를 받을 수 있다. 참고
    # -*- coding:utf-8 -*-
    
    from bottle import route, run
    from bottle import get, post, request
    
    
    @route('/login', method='GET')  # or @get('/login')
    def login():
        username = request.query.get('user')
        password = request.query.get('pass')
    
        #GETで何も渡されていない時はusername,passwordに何も入れない
        username = "" if username is None else username
        password = "" if password is None else password
    
        return '''
        <form action="/login" method="post">
                Username: <input name="username" type="text" value="{username}"/>
                Password: <input name="password" type="password" value="{password}"/>
                <input value="Login" type="submit" />
            </form>
        '''.format(username=username, password=password)
    
    
    @route('/login', method='POST')  # or @post('/post')
    def do_login():
        username = request.forms.get('username')
        password = request.forms.get('password')
    
        return "{username} {password}".format(username=username, password=password)
    
    
    run(host='localhost', port=8080, debug=True)
    

    GET



    http://localhost:8080/login


    http://localhost:8080/login?user=hoge&pass=fuga


    POST





    오류 페이지 보기


    # -*- coding:utf-8 -*-
    
    from bottle import route, run
    from bottle import error
    
    
    @route('/hello')
    def hello():
        return "Hello World!"
    
    
    @error(404)
    def error404(error):
        return "Nothing here sorry {error}".format(error=error)
    
    
    run(host='localhost', port=8080, debug=True)
    

    일부러 없는 URL을 밟아 본다.
    http://localhost:8080/hellow


    결론



    생각보다 쉽게 ​​움직여주고 솔직히 놀랐습니다.
    이번에는 특히 템플릿이라든지 생각 없이 움직이는 것에 중점을 두고 있었습니다만, 조사해 보면 템플릿 엔진만 바꾸어 사용하고 있는 사람이 상당히 있는 느낌이었습니다.
    ( Jinja2 가 인기인가?)

    참고



    Tutorial — Bottle 0.13-dev documentation : ht tp // 붐 tぇpy. rg / cs / / v / tho l. HTML
    파이썬 웹 프레임 워크 6 가지를 간략하게 소개 - Mojilog : htp // 모지 x. rg / 2013/04/13 / py 쵸시 x - 와 fs
    Bottle Request/Response 객체 마스터 - Qiita : ぃ tp // 이 m / 토타 카_ 사촌 / ms / 62fc4d58d1 7867 A158
    파이썬에서 None 비교는 == 대신 is를 사용합니다 - 안녕하세요 안녕하세요 monmon입니다! : h tp // Monmon. 는 bぉ. jp/엔트리/20110214/1297710749

    좋은 웹페이지 즐겨찾기