Python에는 기본적인 작은 아키텍처부터 완전한 아키텍처까지 셀 수 없이 많은 웹 프레임워크가 있으며, 각 프레임워크에는 고유한 장점이 있습니다. 이제 이를 사용하여 일부 웹 개발을 수행할 준비가 되었습니다. 세부 사항을 살펴보기 전에 처음부터 시작해 보겠습니다.
목표
기존의 풍부한 사진 리소스를 사용하여 사진 보기 웹사이트 구축
python3
flask: 오픈 소스 Python 웹 서버 프레임워크
jinja2:flask 기본 템플릿 엔진
추천 pycharm
python은 인터페이스를 제공합니다: WSGI: 웹 서버 게이트웨이 인터페이스
웹 개발자는 HTTP 요청에 응답하는 기능만 구현하면 됩니다. TCP 연결을 건드리지 않고 HTTP 원시 요청 및 응답 형식.
다음은 가장 간단한 웹 애플리케이션의 예입니다.
# hello.pydef application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1>Hello, Python web!</h1>']# server.py# 从wsgiref模块导入:from wsgiref.simple_server import make_server# 导入我们自己编写的application函数:from hello import application# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:httpd = make_server('', 8000, application) print('Serving HTTP on port 8000...')# 开始监听HTTP请求:httpd.serve_forever()
environ: 모든 HTTP 요청 정보를 포함하는 dict 객체
start_response: HTTP 응답을 보내는 함수.
두 스크립트를 동일한 디렉터리에 넣고 server.py를 실행한 다음 http://127.0.0.1:8000을 방문하여 효과를 확인하세요.
사실 웹 애플리케이션은 다양한 URL을 처리합니다.
hello.py를 수정하겠습니다
def application(environ, start_response): method = environ['REQUEST_METHOD'] path = environ['PATH_INFO'] if method=='GET' and path=='/': return handle_home(environ, start_response) if method=='POST' and path='/signin': return handle_signin(environ, start_response) ...
이것은 '/'와 '/signin'이라는 두 개의 URL을 처리합니다.
물론 피곤하지 않다면 계속해서 이렇게 작성할 수 있습니다.
위 방법은 너무 힘들고 느리기 때문에 고급 방법을 배워봅시다:
flask
코드를 보세요
from flask import Flaskfrom flask import request app = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def home(): return '<h1>Home</h1>'@app.route('/signin', methods=['GET'])def signin_form(): return '''<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>'''@app.route('/signin', methods=['POST'])def signin(): # 需要从request对象读取表单内容: if request.form['username']=='admin' and request.form['password']=='password': return '<h3>Hello, admin!</h3>' return '<h3>Bad username or password.</h3>'if __name__ == '__main__': 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('/', methods=['GET', 'POST'])def home(): path = '/' all_file = os.listdir(path) return render_template('home.html',all_file = all_file)if __name__ == '__main__': 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('/',methods=['GET','POST'])def list_all(): path = './static/mzitu/' all_pic = os.listdir(path) return render_template('welcome.html',all_pic = all_pic)#具体展示图片@app.route('/<path>',methods=['GET','POST'])def list_pic(path): #错误链接无法找到图片目录就提示错误链接 if(path not in os.listdir('./static/mzitu/')): return render_template('error.html') pic_path = './static/mzitu/' + path all_pic = os.listdir(pic_path) return render_template('pic.html',title = path,all_pic = all_pic)if __name__ == '__main__': #port为端口,host值为0.0.0.0即不单单只能在127.0.0.1访问,外网也能访问 app.run(host='0.0.0.0',port='2333')
그 다음 템플릿 파일
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!