Python web framework learning notes and pythonweb learning notes
I. Nature of web Framework
1. handle requests by yourself based on socket
#! /Usr/bin/env python3 # coding: utf8import socketdef handle_request (client): # receive request buf = client. recv (1024) print (buf) # return information client. send (bytes ('
2. wsgi-based
WSGI, short for Web Server Gateway Interface or Python Web Server Gateway Interface, is a simple and common Interface between the Web Server and Web application or framework defined for the Python language. Since WSGI was developed, similar interfaces have also appeared in many other languages.
The official definition of WSGI is the Python Web Server Gateway Interface. It can be seen from the name that this is a Gateway, that is, a Gateway. The gateway is used to convert between protocols.
WSGI is a low-level interface between a Web server and a Web application or application framework, to improve the commonality of Web application development that can be transplanted. WSGI is designed based on the existing CGI standards.
Many frameworks have built-in WSGI servers, such as Flask, webpy, Django, and CherryPy. Of course, the performance is not good. The built-in web server is mostly for testing purposes. During the release, the WSGI server in the production environment or the uwsgi with nginx is used.
The independent WSGI server provided by the python standard library is called wsgiref.
#! /Usr/bin/env python # coding: UTF-8 # import wsgi module from wsgiref. simple_server import make_serverdef RunServer (environ, start_response): start_response ('2014, 200 OK ', [('content-type', 'text/html')]) return [bytes ("welcome webserver ". encode ('utf8')] if _ name _ = '_ main _': httpd = make_server ('', 8000, RunServer) print ("Serving HTTP on port 8000... ") httpd. serve_forever () # receiving requests # preprocessing requests (encapsulated with many http requests)
After the request comes, run the RunServer function.
Schematic:
When a user sends a request, the socket sends the request to the function for processing, and then returns it to the user.
Ii. custom web framework
Develop a Web framework based on the wsgiref module provided by the python standard library
Previously, only one url can be accessed using wsgiref.
The following url requests can be processed and returned to the user
#! /Usr/bin/env python # coding: utf-8from wsgiref. simple_server import make_serverdef RunServer (environ, start_response): start_response ('000000', [('content-type', 'text/html ')]) # depending on the url, returns a different string #1 get the URL [where to get the URL? When the request comes, run RunServer. # wsgi encapsulates these requests to us. These requests are encapsulated. environ & start_response] request_url = environ ['path _ info'] print (request_url) #2 depending on the URL # print environ # Here we can use breakpoints to check what data it encapsulates if request_url = '/login ': return [bytes ("welcome login", 'utf8')] elif request_url = '/reg': return [bytes ("welcome reg", 'utf8')] else: return [bytes ('
Of course, although the above process is based on different URLs, if there are a large number of URLs, the code will be cumbersome to write.
So use the following method for processing
#! /Usr/bin/env python # coding: utf-8from wsgiref. simple_server import make_serverdef index (): return [bytes ('
Iii. template engine
The preceding operations return a string to the user based on the url accessed by the user, for example, return xxx.
Case:
First write an index.html page
Content:
<!DOCTYPE html>
Login.html page
Content:
<!DOCTYPE html>
Python code:
#! /Usr/bin/env python # coding: utf-8from wsgiref. simple_server import make_serverdef index (): # Read the index page and return it to indexfile = open('index.html ', 'r + '). read () return [bytes (indexfile, 'utf8')] def login (): loginfile = open('login.html ', 'r + '). read () return [bytes (loginfile, 'utf8')] urllist = [('/login', login), ('/Index', index),] def RunServer (environ, start_response): start_response ('2017 OK ', [('content-type' , 'Text/html')]) # Return different strings based on different URLs #1. Obtain the url [where to obtain the URL? When the request comes over and runs RunServer, wsgi encapsulates these requests to us. All these requests are encapsulated. environ & start_response] request_url = environ ['path _ info'] print (request_url) #2 depending on the URL # print environ # Here we can use breakpoints to check what data it encapsulates for url in urllist: # if the url requested by the user matches the defined rul, if request_url = url [0]: # execute return url [1] () else: #404 return [bytes ('
But the above content can only be returned to static content, not dynamic content
So how to return dynamic content?
Customize a set of special syntaxes and replace them
Use the open-source tool jinja2 and follow its specified syntax
Index.html follows the jinja syntax for replacement, loop, and judgment.
First, display the approximate effect. The specific jinja2 will be described in detail in chapter django notes.
Index.html page
Content:
<!DOCTYPE html>
Python code:
#! /Usr/bin/env python #-*-coding: UTF-8-*-import time # import the wsgi module from wsgiref. simple_server import make_server # import the jinja module from jinja2 import Templatedef index (): Unlock to open index.html data = open('index.html '). read () # Use jinja2 to render template = Template (data) result = template. render (name = 'yunaoyunao', age = '18', time = str (time. time (), user_list = ['linux ', 'python', 'bootstarp'], num = 1) # Why is jinja used for replacement, because it is not just text It also supports the if judgment & for loop operation # note that the default unicode encoding is set to UTF-8 return [bytes (result, 'utf8')] urllist = [('/Index', index),] def RunServer (environ, start_response): start_response ('2014, 200 OK', [('content-type ', 'text/html')]) # Return different strings based on different URLs #1. Obtain the url [Where can I obtain the URL? When the request comes, run RunServer. # wsgi encapsulates these requests to us. These requests are encapsulated. environ & start_response] request_url = environ ['path _ info'] print (request_url) #2 perform different operations based on the URL # loop this list for url in urllist: # if the url requested by the user matches the rul defined by us if request_url = url [0]: print (url) return url [1] () else: #404 return [bytes ('
Iv. MVC and MTV
1. MVC
The full name is Model View Controller, short for model-view-controller. It is a Model of software design, organize Code by means of separation of business logic, data, and interface display, and integrate the business logic into a component to improve and personalize the custom interface and user interaction, you do not need to rewrite the business logic. MVC is uniquely developed to map traditional input, processing, and output functions in a logical graphical user interface structure.
Add the routing rule to urls. py
Operate the func function in the controller of urls.
Operate the database in db. py in the model.
Add html pages to views
Schematic:
2. MTV
Models handles DB operations
Templates html Template
Views process function requests
Schematic:
The above is all the content of this article, hoping to help you learn.