Web2py-핵심

명령 줄 옵션

이전 장에서 GUI 위젯을 사용하여 web2py 서버를 시작하는 방법을 배웠습니다.

이 위젯은 다음에서 서버를 시작하여 건너 뛸 수 있습니다. command line 신속한.

python web2py.py -a '비밀번호'-i 127.0.0.1 -p 8000

web2py 서버가 시작될 때마다 "parameters_8000.py"여기서 모든 비밀번호는 해시 된 형식으로 저장됩니다.

추가 보안 목적으로 다음 명령 줄을 사용할 수 있습니다.

python web2py.py -a '<recycle>' -i 127.0.0.1 -p 8000

위의 시나리오에서 web2py는 "에 저장된 해시 된 비밀번호를 재사용합니다.parameters_8000.py".

이 경우 파일 "parameters_8000.py"가 실수로 삭제되거나 다른 이유로 인해 web2py에서 웹 기반 관리 인터페이스가 비활성화됩니다.

URL 매핑 / 파견

web2py의 기능은 URL을 특정 형식으로 매핑하는 model-view-controller를 기반으로합니다. http://127.0.0.1:8000/a/d/f.html

기능까지 라우팅됩니다. “f()” 컨트롤러에서 언급 d.py"a"라는 응용 프로그램 아래에 있습니다. 컨트롤러가 애플리케이션에 없으면 web2py는 이름이 지정된 기본 컨트롤러를 사용합니다.“default.py”.

URL에 지정된 함수가 없으면 기본 함수가 호출됩니다. init()사용. URL의 작동은 아래 이미지에 개략적으로 표시됩니다.

확장 .htmlURL의 경우 선택 사항입니다. 확장은 확장을 결정합니다.View컨트롤러에 정의 된 함수의 출력을 렌더링합니다. 동일한 콘텐츠가 html, xml, json, rss 등 여러 형식으로 제공됩니다.

인수를 받아들이고 사용자에게 적절한 출력을 제공하는 함수를 기반으로 요청이 전달됩니다. 사용자의 필요에 따라 출력을 제공하기 위해 애플리케이션의 모델 및보기와 상호 작용하는 컨트롤러입니다.

web2py – 워크 플로

web2py의 워크 플로우는 아래에서 설명합니다.

  • 웹 서버는 각각의 모든 HTTP 요청을 자체 스레드에서 동시에 관리합니다.

  • HTTP 요청 헤더가 구문 분석되어 디스패처에 전달됩니다.

  • Dispatcher는 애플리케이션 요청을 관리하고 PATH_INFO함수 호출의 URL에서. 모든 함수 호출은 URL에 표시됩니다.

  • 정적 폴더에 포함 된 파일에 대한 모든 요청은 직접 관리되며 대용량 파일은 클라이언트로 스트리밍됩니다.

  • 정적 파일을 제외한 모든 요청은 작업에 매핑됩니다.

  • 요청 헤더에 앱에 대한 세션 쿠키가 포함 된 경우 세션 개체가 검색됩니다. 그렇지 않으면 세션 ID가 생성됩니다.

  • 작업이 값을 문자열로 반환하면 클라이언트에 반환됩니다.

  • 액션이 iterable을 반환하는 경우 데이터를 반복하고 클라이언트로 스트리밍하는 데 사용됩니다.

조건부 모델

이전 장에서 우리는 Controllers. web2py는 각 애플리케이션에서 모델,보기 및 컨트롤러를 사용합니다. 따라서 기능을 이해하는 것도 필요합니다.Model.

다른 MVC 애플리케이션과 달리 web2py의 모델은 조건부로 처리됩니다. 하위 폴더의 모델은 컨트롤러의 사용량에 따라 실행됩니다. 이것은 다음 예를 통해 설명 할 수 있습니다.

URL을 고려하십시오- http://127.0.0.1:8000/a/d/f.html

이 경우 ‘a’ 응용 프로그램의 이름입니다. ‘d’ 컨트롤러의 이름이고 f()컨트롤러와 관련된 기능입니다. 실행될 모델 목록은 다음과 같습니다.

applications/a/models/*.py
applications/a/models/d/*.py
applications/a/models/d/f/*.py

도서관

web2py에는 모든 애플리케이션에 객체로 노출되는 라이브러리가 포함되어 있습니다. 이러한 개체는 "gluon"이라는 디렉터리 아래의 코어 파일 내에 정의됩니다.

DAL 템플릿과 같은 많은 모듈은 종속성이 없으며 web2py의 프레임 워크 외부에서 구현할 수 있습니다. 또한 우수 사례로 간주되는 단위 테스트를 유지합니다.

응용

web2py 애플리케이션은 아래에 다이어그램 형식으로 표시됩니다.

그만큼 Applications web2py에서 개발 한 부분은 다음과 같습니다.

  • Models − 데이터 및 데이터베이스 테이블을 나타냅니다.

  • Controllers − 애플리케이션 로직 및 워크 플로우를 설명합니다.

  • Views − 데이터 표시 렌더링을 도와줍니다.

  • Languages − 애플리케이션의 문자열을 다양한 지원 언어로 번역하는 방법을 설명합니다.

  • Static files − 처리 할 필요가 없습니다 (예 : 이미지, CSS 스타일 시트 등).

  • ABOUTREADME − 프로젝트 세부 정보.

  • Errors − 응용 프로그램에서 생성 한 오류 보고서를 저장합니다.

  • Sessions − 각 특정 사용자와 관련된 정보를 저장합니다.

  • Databases − SQLite 데이터베이스 및 추가 테이블 정보를 저장합니다.

  • Cache − 캐시 된 애플리케이션 항목을 저장합니다.

  • Modules − 모듈은 다른 선택적 Python 모듈입니다.

  • Private − 포함 된 파일은 컨트롤러가 액세스하지만 개발자가 직접 액세스하지 않습니다.

  • Uploads − 파일은 모델에 의해 액세스되지만 개발자가 직접 액세스하지 않습니다.

API

web2py에서 models, controllersviews 개발자를 위해 특정 개체를 가져 오는 환경에서 실행됩니다.

Global Objects − 요청, 응답, 세션, 캐시.

Helpers− web2py에는 프로그래밍 방식으로 HTML을 빌드하는 데 사용할 수있는 도우미 클래스가 포함되어 있습니다. HTML 태그에 해당하며“HTML helpers”.

예 : A, B, FIELDSET, FORM 등

세션

세션은 웹 응용 프로그램 전체에서 사용자의 상호 작용을 통해 유지되는 정보의 서버 측 저장소로 정의 될 수 있습니다.

web2py의 세션은 스토리지 클래스의 인스턴스입니다.

예를 들어, 변수는 다음과 같이 세션에 저장 될 수 있습니다.

session.myvariable = "hello"

이 값은 다음과 같이 검색 할 수 있습니다.

a = session.myvariable

동일한 사용자가 동일한 세션에서 코드를 실행하는 한 변수 값을 검색 할 수 있습니다.

web2py for session에서 중요한 방법 중 하나는 “forget”

session.forget(response);

세션을 저장하지 않도록 web2py에 지시합니다.

백그라운드에서 작업 실행

HTTP 요청이 웹 서버에 도착하여 각 요청을 자체 스레드에서 병렬로 처리합니다. 활성 상태 인 작업은 전경에서 수행되고 다른 작업은 배경에 유지됩니다. 백그라운드 작업 관리도 web2py의 주요 기능 중 하나입니다.

시간이 많이 걸리는 작업은 바람직하게는 백그라운드에서 유지됩니다. 백그라운드 작업을 관리하는 메커니즘 중 일부는 다음과 같이 나열됩니다.

  • CRON

  • Queues

  • Scheduler

CRON

web2py에서 CRON지정된 시간 간격 내에 작업을 실행할 수있는 기능을 제공합니다. 각 애플리케이션에는 기능을 정의하는 CRON 파일이 포함되어 있습니다.

스케줄러

기본 제공 스케줄러는 우선 순위를 설정하여 백그라운드에서 작업을 실행하는 데 도움이됩니다. 작업을 생성, 예약 및 수정하기위한 메커니즘을 제공합니다.

예약 된 이벤트는 파일 이름과 함께 모델에 나열됩니다. “scheduler.py”.

애플리케이션 구축

web2py에서 모델과 컨트롤러를 만드는 방법에 대한 개요가있었습니다. 여기서는“Contacts”. 응용 프로그램은 회사 목록과 해당 회사에서 일하는 사람들의 목록을 유지해야합니다.

모델 생성

여기서 데이터 사전에 대한 테이블의 식별이 모델입니다. 연락처 애플리케이션의 모델은 "models”폴더. 파일은 다음에 저장됩니다.models/db_contacts.py.

# in file: models/db_custom.py
db.define_table('company', Field('name', notnull = True, unique = True), format = '%(name)s')
db.define_table(
   'contact',
   Field('name', notnull = True),
   Field('company', 'reference company'),
   Field('picture', 'upload'),
   Field('email', requires = IS_EMAIL()),
   Field('phone_number', requires = IS_MATCH('[\d\-\(\) ]+')),
   Field('address'),
   format = '%(name)s'
)

db.define_table(
   'log',
   Field('body', 'text', notnull = True),
   Field('posted_on', 'datetime'),
   Field('contact', 'reference contact')
)

위 파일이 생성되면 URL의 도움으로 테이블에 액세스 할 수 있습니다. http://127.0.0.1:8000/contacts/appadmin

컨트롤러 생성

그만큼 Controller 연락처 나열, 편집 및 삭제를위한 일부 기능이 포함됩니다.

# in file: controllers/default.py
def index():return locals()
def companies():companies = db(db.company).select(orderby = db.company.name)
return locals()

def contacts():company = db.company(request.args(0)) or redirect(URL('companies'))
contacts = db(db.contact.company == company.id).select(orderby = db.contact.name)
return locals()

@auth.requires_login()
def company_create():form = crud.create(db.company, next = 'companies')
return locals()

@auth.requires_login()
def company_edit():company = db.company(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.company, company, next='companies')
return locals()

@auth.requires_login()
def contact_create():db.contact.company.default = request.args(0)
form = crud.create(db.contact, next = 'companies')
return locals()

@auth.requires_login()
def contact_edit():contact = db.contact(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.contact, contact, next = 'companies')
return locals()

def user():return dict(form = auth())

창조의 view 출력과 함께 다음 장에서 설명합니다.