출처 : automatetheboringstuff.com/2e/chapter20/

 

 

 PyKeyboard Attributes

Keyboard key string

Meaning

'a', 'b', 'c', 'A', 'B', 'C', '1', '2', '3', '!', '@', '#', and so on

The keys for single characters

'enter' (or 'return' or '\n')

The ENTER key

'esc'

The ESC key

'shiftleft', 'shiftright'

The left and right SHIFT keys

'altleft', 'altright'

The left and right ALT keys

'ctrlleft', 'ctrlright'

The left and right CTRL keys

'tab' (or '\t')

The TAB key

'backspace', 'delete'

The BACKSPACE and DELETE keys

'pageup', 'pagedown'

The PAGE UP and PAGE DOWN keys

'home', 'end'

The HOME and END keys

'up', 'down', 'left', 'right'

The up, down, left, and right arrow keys

'f1', 'f2', 'f3', and so on

The F1 to F12 keys

'volumemute', 'volumedown', 'volumeup'

The mute, volume down, and volume up keys (some keyboards do not have these keys, but your operating system will still be able to understand these simulated keypresses)

'pause'

The PAUSE key

'capslock', 'numlock', 'scrolllock'

The CAPS LOCK, NUM LOCK, and SCROLL LOCK keys

'insert'

The INS or INSERT key

'printscreen'

The PRTSC or PRINT SCREEN key

'winleft', 'winright'

The left and right WIN keys (on Windows)

'command'

The Command () key (on macOS)

'option'

The OPTION key (on macOS)

'Python' 카테고리의 다른 글

파이선 엑셀 자동화 코드1  (0) 2020.12.14

 youtube 나도코딩 강좌에서 연습용으로 코딩한 것입니다. (출처:www.youtube.com/watch?v=exgO1LFl9x8&t=3033s)

강좌 코드

sample1.xlsx
0.00MB

랑은 조금 다릅니다.

=================================

from openpyxl import Workbook

from random import *

wb = Workbook()

ws = wb.active

 

ws.append(["번호","영어","수학"])

for i in range(1,11):

    ws.append([i,randint(0,100),randint(0,100)])

 

col_B = ws["B"]

 

print(col_B)

 

for cell in col_B:

    print(cell.value)

 

col_range = ws["B:C"]

for cols in col_range:

    for cell in cols:

        print(cell.value)

 

row_title = ws[1]

for cell in row_title:

    print(cell.value)

 

row_range = ws[2:6]

for rows in row_range:

    for cell in rows:

        print(cell.value, end="  ")

    print()

 

row_range = ws[2:ws.max_row]

for rows in row_range:

    for cell in rows:

        print(cell.value, end=" ")

    print()

 

from openpyxl.utils.cell import coordinate_from_string

for rows in row_range:

    for cell in rows:

        print(cell.coordinate, end=" ")

        xy = coordinate_from_string(cell.coordinate)

        print(xy, end=" ")

        print(xy[0], end=" ")

        print(xy[1], end=" ")

        print()

    print()

 

wb.save("sample1.xlsx")

#wb = load_workbook("sample.xlsx")

 

====================================

실행결과

====================================

번호
영어
수학
1  34  46
2  95  19
3  40  33
4  35  48
5  85  66
1 34 46
2 95 19
3 40 33
4 35 48
5 85 66
6 41 4
7 71 54
8 74 29
9 62 6
10 58 95
A2 ('A', 2) A 2 
B2 ('B', 2) B 2
C2 ('C', 2) C 2

A3 ('A', 3) A 3
B3 ('B', 3) B 3
C3 ('C', 3) C 3

A4 ('A', 4) A 4
B4 ('B', 4) B 4
C4 ('C', 4) C 4

A5 ('A', 5) A 5
B5 ('B', 5) B 5
C5 ('C', 5) C 5 

A6 ('A', 6) A 6
B6 ('B', 6) B 6
C6 ('C', 6) C 6

A7 ('A', 7) A 7
B7 ('B', 7) B 7
C7 ('C', 7) C 7

A8 ('A', 8) A 8
B8 ('B', 8) B 8
C8 ('C', 8) C 8

A9 ('A', 9) A 9
B9 ('B', 9) B 9
C9 ('C', 9) C 9

A10 ('A', 10) A 10
B10 ('B', 10) B 10
C10 ('C', 10) C 10

A11 ('A', 11) A 11
B11 ('B', 11) B 11
C11 ('C', 11) C 11

PS C:\Users\android\coding\rpa> 

'Python' 카테고리의 다른 글

pyautogui 키보드 속성  (0) 2020.12.21

=====================

call.html

=====================

{% macro render_dialog(title, class='dialog')-%}

   <div class = "{{ class }}">

      <h2>{{title}}</h2>

      <div class = "contents">

         {{caller()}}

 

      </div>

   </div>

 {%- endmacro %}

 

 {% call render_dialog('Call Blocl') %}

     call block과 매크로 동시 사용

 {% endcall%}

 

 

 

===========

execution.py

===========

from jinja2 import Environment, FileSystemLoader

file_loader = FileSystemLoader('templates')

env = Environment(loader=file_loader)

template = env.get_template("call.html")

template.render()

print(template.render())

 

 

==============================

실행결과

==============================

○ 이스케이핑

   - 적은 단위 작업: 작은 따옴표 ( 특수문자를 일반 문자로 처리 )

     '&nbsp'같은 공백문자를 jinja2에서는 '로 감싸서 표시 ''&nbsp''

  - 큰 단위 블럭 구문의 경우

     {% raw %}

         ---

         ---

     {% rawend %}

 

 jinja2 template engine의 주석처리

   {#     #}

 

○ html 주석처리

   (!--    

           ---

           ---

           ---

   ->

 

 jinja2에서 불필요 개행("/n")문자삭제

 

   {# #}

 

- "/n" 문자 제거 : {%   -%}   

 

 

○ 매크로 만들기 : 

   - {% macro <macro name>(macro argument1, arg2,,,)  %}

     <action script 실행코드 >

     {% endmacro %}

 

   - 예제 -

    {% macro input(name, value='',type='text',size=30)%}

       <input type="{{type}}" name="{{name}}" value="{{value}}" size="size}}">

    {% endmacro%}  ==> 매크로 작성

     <p>{{input('username')}}</p>

     <p>{{input('password',type='password')}}</p>

 

실행코드

from jinja2 import Environment, FileSystemLoader

file_loader = FileSystemLoader('templates')

env = Environment(loader=file_loader)

template = env.get_template("macro.html")

template.render()

print(template.render())

 

 

 

===macro.html에서 개행문자 제거 명령 적용

{% macro input(name='', value='',type='text',size=30) -%}

  <input type="{{type}}" name="{{name}}" value="{{value}}" size="{{size}}">

{%- endmacro %}

  <p> {{input('username')}}</p>

  <p> {{input('password',type='password')}}</p>

 

--실행 결과 --

 

 

 

 

 

 

 

 

 

 

 

 

gseek의 flask 강좌를 공부하며 학습한 내용을 공유하고 소스를 공유하고자 포스팅합니다.

 

include 기능 및 super 코드를 학습했는데 잘 안되는 부분은 삭제를 했습니다.

 

template 상속은 

   {% extends "<부모템플리트 이름>" %}

   {% block %} 대체할 코드 {% endblock %}

 

=====  app.py  ====

from flask import Flask, render_template

app=Flask(__name__)

 

@app.route("/")

def temp_test():

    return render_template("super.html",my_string="템플릿 테스트",my_list=[11,22,33,44,55,66,77])

 

if __name__=="__main__":

   app.run()

 

====== super.html ====

{% block content %}

  <h4>자식 템플릿의 시작</h4>

  <br/>

  <p>My String : {{my_string}}</p>

  <p>리스트 값:{{my_list[2]}}</p>

  <p>전체 리스트</p>

  <ul>

     {% for i in my_list%}

     <li>{{i}}</li>

     {% endfor%}

  </ul>

  <h4>자식 템플릿의 끝</h4>

 {% block footer %}

  {{ super()}}

 {% endblock footer %}

{% endblock content%}

 

===nav.html =====

 

<nav class="navbar navbar-inverse" role="navigation">

      <div class="container-fluid">

         <div class = "navbar-header">

           <a clas="navbar-brand" href="/">Logo!</a>

         </div>

      </div>

      <div class = "collapse navbar-collapse">

        <ul class="nav navbar-nav">

          <li class="active"><a href="#">메뉴1</a></li>

          <li><a href="#">메뉴2</a></li>

          <li><a href="#">메뉴3</a></li>

          <li><a href="#">메뉴4</a></li>         

        </ul>

        <form class="navbar-form navbar-left" role="search">

           <div class="form-group">

             <input type="text" class="form-control" placeholder="검색하기">

           </div>

           <button type="submit" class = "btn btn-default">확인</button>

        </form>

        <ul class = "nav navbar-nav navbar-right">

           <li><a href="#">회원가입</a></li>

           <li class="dropdown">

              <a href="#" class="dropdown-toggle" data-toggle="dropdown">사용자<b class"caret"></b></a>

              <ul class="dropdown-menu">

                 <li><a href="#">나의 프로필</a></li>

                 <li><a href="#">주문내역</a></li>

                 <li class="divider"></li>

                 <li><a href="#">로그인</a></li>

              </ul>

            </li>

        </ul>

      </div>

    </nav>

 

==== layout.html ====

<!DOCTYPE html>

  <head>

    <title>Flask Template Example</title>

    <meta name="veiwport" content = "width=device-width, initial-scal=1.0">

   

  </head>

    <style type="text/css">

      h3 {color:blue}

      h4 {color:red}

      .footer{color:green}

    </style>

  <body>

  {% include 'nav.html'%}

   {% block heading %}

    <h1>jinja super test</h1>

   {% endblock heading %}

 

    <div class ='wrap'>

       <h3>기본 템플릿</h3>

       <br/>

       {% block content %}{% endblock content %}

       <br/>

       <h3> 기본 템플릿</h3>

       <br/>

       <div class = "footer">

         {% block footer%}

             추가된 footer 영역

         {% endblock footer%}

    </div>

   

   

  </body>

</html>

 

Python에서 Flask는 웹을 만들수 있는 프레임워크의 하나입니다.

Flask를 학습하면서 만든 소스코드를 올려 학습한 내용을 잊지않고 필요시 찾아 볼수있도록 해보겠습니다.

학습은 gseek의 flask강좌의 내용을 학습하며 만든 소스 코드입니다.

 

app.py실행==>temp2.html==>layout.html실행

 

=================================================================

mysite/app.py

=================================================================

from flask import Flask, render_template

app=Flask(__name__)

 

@app.route("/")

def temp_test():

    return render_template("temp2.html",my_string="템플릿 테스트",my_list=[11,22,33,44,55,66,77])

 

if __name__=="__main__":

   app.run()

 

 

 

================================================================

mysite/templates/temp2.html

=================================================================

{% extends "layout.html"%}

{% block content %}

  <h4>자식 템플릿의 시작</h4>

  <br/>

  <p>My String : {{my_string}}</p>

  <p>리스트 값:{{my_list[2]}}</p>

  <p>전체 리스트</p>

  <ul>

     {% for i in my_list%}

     <li>{{i}}</li>

     {% endfor%}

  </ul>

  <h4>자식 템플릿의 끝</h4>

{% endblock%}

 

 

=================================================================

mysite/templates/layout.html

=================================================================

<!DOCTYPE html>

  <head>

    <title>Flask Template Example</title>

    <meta name="veiwport" content = "width=device-width, initial-scal=1.0">

   

  </head>

    <style type="text/css">

      h3 {color:blue}

      h4 {color:red}

    </style>

  <body>

    <nav class="navbar navbar-inverse" role="navigation">

      <div class="container-fluid">

         <div class = "navbar-header">

           <a clas="navbar-brand" href="/">Logo!</a>

         </div>

      </div>

      <div class = "collapse navbar-collapse">

        <ul class="nav navbar-nav">

          <li class="active"><a href="#">메뉴1</a></li>

          <li><a href="#">메뉴2</a></li>

          <li><a href="#">메뉴3</a></li>

          <li><a href="#">메뉴4</a></li>         

        </ul>

        <form class="navbar-form navbar-left" role="search">

           <div class="form-group">

             <input type="text" class="form-control" placeholder="검색하기">

           </div>

           <button type="submit" class = "btn btn-default">확인</button>

        </form>

        <ul class = "nav navbar-nav navbar-right">

           <li><a href="#">회원가입</a></li>

           <li class="dropdown">

              <a href="#" class="dropdown-toggle" data-toggle="dropdown">사용자<b class"caret"></b></a>

              <ul class="dropdown-menu">

                 <li><a href="#">나의 프로필</a></li>

                 <li><a href="#">주문내역</a></li>

                 <li class="divider"></li>

                 <li><a href="#">로그인</a></li>

              </ul>

            </li>

        </ul>

      </div>

    </nav>

   

    <div class ='wrap'>

       <h3>기본 템플릿</h3>

       <br/>

       {% block content %}{% endblock %}

       <br/>

       <h3> 기본 템플릿</h3>

    </div>

   

   

  </body>

</html>

 

===============================================

pythonanywhere에서는 학습당시에 에러가 발생해 애를 먹게 했었는데 메일을 보내고 응답이 구체적인 에러 내용을 알려 달라해서 다시 해보니 에러가 없어 결과를 올립니다.

 

 pythonanywhere에서는 cdn은 동작하지않네요..

그래도 나머지는 잘 동작해서 행복했습니다.

'Python > Flask' 카테고리의 다른 글

macro & caller 사용 예문  (0) 2020.07.05
Python : Flask: jinja2 :특수문자,줄바꿈지우기  (2) 2020.06.21
python : include 및 super 코드  (0) 2020.06.17

+ Recent posts