간단한 웹사이트를 구축하는 방법을 가르쳐주세요: Python 개발 웹 서버

坏嘻嘻
풀어 주다: 2018-09-13 17:35:31
원래의
4735명이 탐색했습니다.

Python에는 기본적인 작은 아키텍처부터 완전한 아키텍처까지 셀 수 없이 많은 웹 프레임워크가 있으며, 각 프레임워크에는 고유한 장점이 있습니다. 이제 이를 사용하여 일부 웹 개발을 수행할 준비가 되었습니다. 세부 사항을 살펴보기 전에 처음부터 시작해 보겠습니다.

목표

기존의 풍부한 사진 리소스를 사용하여 사진 보기 웹사이트 구축

조건

개발 언어:

python3

라이브러리:

flask: 오픈 소스 Python 웹 서버 프레임워크
jinja2:flask 기본 템플릿 엔진

편집자:

추천 pycharm

가장 간단한 웹 서버

python은 인터페이스를 제공합니다: WSGI: 웹 서버 게이트웨이 인터페이스
웹 개발자는 HTTP 요청에 응답하는 기능만 구현하면 됩니다. TCP 연결을 건드리지 않고 HTTP 원시 요청 및 응답 형식.
다음은 가장 간단한 웹 애플리케이션의 예입니다.

# hello.pydef application(environ, start_response):
    start_response(&#39;200 OK&#39;, [(&#39;Content-Type&#39;, &#39;text/html&#39;)])    return [b&#39;<h1>Hello, Python web!</h1>&#39;]# server.py# 从wsgiref模块导入:from wsgiref.simple_server import make_server# 导入我们自己编写的application函数:from hello import application# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:httpd = make_server(&#39;&#39;, 8000, application)
print(&#39;Serving HTTP on port 8000...&#39;)# 开始监听HTTP请求:httpd.serve_forever()
로그인 후 복사
  • environ: 모든 HTTP 요청 정보를 포함하는 dict 객체

  • start_response: HTTP 응답을 보내는 함수.

두 스크립트를 동일한 디렉터리에 넣고 server.py를 실행한 다음 http://127.0.0.1:8000을 방문하여 효과를 확인하세요.

URL 처리

사실 웹 애플리케이션은 다양한 URL을 처리합니다.
hello.py를 수정하겠습니다

def application(environ, start_response):
    method = environ[&#39;REQUEST_METHOD&#39;]
    path = environ[&#39;PATH_INFO&#39;]    if method==&#39;GET&#39; and path==&#39;/&#39;:        return handle_home(environ, start_response)    if method==&#39;POST&#39; and path=&#39;/signin&#39;:        return handle_signin(environ, start_response)
...
로그인 후 복사

이것은 '/'와 '/signin'이라는 두 개의 URL을 처리합니다.
물론 피곤하지 않다면 계속해서 이렇게 작성할 수 있습니다.

템플릿 사용하기

위 방법은 너무 힘들고 느리기 때문에 고급 방법을 배워봅시다:
flask

코드를 보세요

from flask import Flaskfrom flask import request

app = Flask(__name__)@app.route(&#39;/&#39;, methods=[&#39;GET&#39;, &#39;POST&#39;])def home():
    return &#39;<h1>Home</h1>&#39;@app.route(&#39;/signin&#39;, methods=[&#39;GET&#39;])def signin_form():
    return &#39;&#39;&#39;<form action="/signin" method="post">
              <p><input name="username"></p>
              <p><input name="password" type="password"></p>
              <p><button type="submit">Sign In</button></p>
              </form>&#39;&#39;&#39;@app.route(&#39;/signin&#39;, methods=[&#39;POST&#39;])def signin():
    # 需要从request对象读取表单内容:
    if request.form[&#39;username&#39;]==&#39;admin&#39; and request.form[&#39;password&#39;]==&#39;password&#39;:        return &#39;<h3>Hello, admin!</h3>&#39;
    return &#39;<h3>Bad username or password.</h3>&#39;if __name__ == &#39;__main__&#39;:
    app.run()
로그인 후 복사

이 파일은 단일 파일이라는 점에 유의하세요.
이 스크립트를 분석해 보겠습니다.
Flask는 Python의 데코레이터를 통해 내부적으로 URL을 함수와 자동으로 연결합니다.
작업을 시작한 후
'/'를 방문하면 우리가 보는 페이지는 "HOME"이라는 단어
'/signin'입니다. 이때 GET을 통해 액세스하고 양식이 보이는데 'admin'을 입력합니다. ' 및 '비밀번호', 로그인하려면 클릭하세요——>
'/signin', 이제 POST를 통해 액세스하면 Hello, admin! 또는 잘못된 사용자 이름 또는 비밀번호가 표시됩니다.

GET을 이해하지 못하는 학생의 경우, POST 및 HTML 양식, html Base를 학습하는 것이 좋습니다.

그러나 이것은 여전히 ​​약간 유연하지 않습니다. 사용자가 액세스할 때 보는 모든 콘텐츠를 작성해야 하고 재사용할 수 없습니다. 이는 너무 번거롭습니다.

템플릿 엔진을 사용하면

템플릿이 위의 문제를 해결합니다. 먼저 코드를 살펴보세요

from flask import Flask, request, render_templateimport os

app = Flask(__name__)@app.route(&#39;/&#39;, methods=[&#39;GET&#39;, &#39;POST&#39;])def home():
    path = &#39;/&#39;
    all_file = os.listdir(path)    return render_template(&#39;home.html&#39;,all_file = all_file)if __name__ == &#39;__main__&#39;:
    app.run()
로그인 후 복사

여기서 루트 디렉터리에 있는 모든 파일의 이름을 읽어서 html 템플릿 페이지로 전달합니다

그런 다음 템플릿 디렉터리가 .py와 동일한 디렉터리에 생성됩니다. 템플릿은 여기에 저장됩니다. 특별한 점은 html에서 Python 명령어와 변수를 사용할 수 있다는 것입니다.

home.html

{% for i in all_file %}    <a href="/page/{{ i }}">{{ i }}</a>{% endfor %}
로그인 후 복사

{% %}는 명령어
{{ }}로 작성되고 변수

로 작성됩니다. 최종 결과는 많은 A 레이블이며, 레이블 이름은 디렉토리 이름입니다.

위의 기본 튜토리얼은 Liao Xuefeng을 나타냅니다.

기본 사항은 완료되었으며 다음 단계는 완제품입니다.

완제품

저번에 크롤링한 사진을 사용하여 웹 사이트를 구축하는 것이 좋습니다.
여기서 동일한 디렉터리에 정적 디렉터리를 만듭니다. 디렉토리를 .py 스크립트로 사용하여 그림을 저장합니다. (.py가 위치한 디렉터리의 외부 레이어에 배치하면 그림이 연결되지 않습니다)

#beautiful_pic.pyfrom flask import Flaskfrom flask import requestfrom flask import render_templateimport os

app = Flask(__name__)#显示所有文件夹@app.route(&#39;/&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])def list_all():
    path = &#39;./static/mzitu/&#39;
    all_pic = os.listdir(path)    return render_template(&#39;welcome.html&#39;,all_pic = all_pic)#具体展示图片@app.route(&#39;/<path>&#39;,methods=[&#39;GET&#39;,&#39;POST&#39;])def list_pic(path):
    #错误链接无法找到图片目录就提示错误链接
    if(path not in os.listdir(&#39;./static/mzitu/&#39;)):        return render_template(&#39;error.html&#39;)
    pic_path = &#39;./static/mzitu/&#39; + path
    all_pic = os.listdir(pic_path)    return render_template(&#39;pic.html&#39;,title = path,all_pic = all_pic)if __name__ == &#39;__main__&#39;:    #port为端口,host值为0.0.0.0即不单单只能在127.0.0.1访问,外网也能访问
    app.run(host=&#39;0.0.0.0&#39;,port=&#39;2333&#39;)
로그인 후 복사

그 다음 템플릿 파일
welcome.html

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>欢迎来到福利页面</title></head><body>
    {% for i in all_pic: %}        <a href="/{{i}}">{{i}}</a>
        <br><br>
    {% endfor %}</body></html>
로그인 후 복사

pic.html

<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>{{ title }}</title></head><body>
    {% for i in all_pic %}    <img src="./static/mzitu/{{title}}/{{i}}" alt="{{i}}">
    <br>
    {% endfor %}</body></html>
로그인 후 복사

error.html

이 있습니다.
<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>出错了</title></head><body>
    你要访问的页面不存在...    <br>
    <a href="/">点此返回首页</a></body></html>
로그인 후 복사

관련 추천:

Eclipse+ PyDev+Django+Mysql은 Python 웹 개발 환경을 구축합니다_MySQL

웹 개발을 처음 접할 때 php, python, ruby ​​중 무엇을 배워야 할까요?

위 내용은 간단한 웹사이트를 구축하는 방법을 가르쳐주세요: Python 개발 웹 서버의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!