本文实例讲述了Python实现手写一个类似django的web框架。分享给大家供大家参考,具体如下:
用与django相似结构写一个web框架。
启动文件代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
from wsgiref.simple_server import make_server #导入模块 from views import * import urls def routers(): #这个函数是个元组 URLpattern = urls.URLpattern return URLpattern #这个函数执行后返回这个元组 def application(environ,start_response): print ( "ok1" ) path = environ.get( "PATH_INFO" ) print ( "path" ,path) start_response( '200 OK' ,[( 'Content-Type' , 'text/html' )]) urlpattern = routers() #讲函数的返回值元组赋值 func = None for item in urlpattern: #遍历这个元组 if path = = item[ 0 ]: #item[0]就是#路径后面的斜杠内容 func = item[ 1 ] #item[1]就是对应的函数名 break if func: #如果路径内容存在函数就存在 return func(environ) #执行这个函数 else : print ( "ok5" ) return [b "404" ] #如果不存在就返回404 if __name__ = = '__main__' : print ( "ok0" ) t = make_server("", 9700 ,application) print ( "ok22" ) t.serve_forever() |
urls.py文件代码:
1
2
3
4
5
6
7
|
from views import * URLpattern = ( ( "/login" , login), ( "/alex" , foo1), ( "/egon" , foo2), ( "/auth" , auth) ) |
views.py文件代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
def foo1(request): # 定义函数 f = open ( "templates/alex.html" , "rb" ) #打开html 以二进制的模式 data = f.read() #读到data里 f.close() #关闭 return [data] #返回这个data def foo2(request): f = open ( "templates/egon.html" , "rb" ) data = f.read() f.close() return [data] def login(request): f = open ( "templates/login.html" , "rb" ) data = f.read() f.close() return [data] def auth(request): print ( "+++" ,request) user_union,pwd_union = request.get( "QUERY_STRING" ).split( "&" ) _,user = user_union.split( "=" ) _,pwd = pwd_union.split( "=" ) if user = = 'Yuan' and pwd = = "123" : return [b "login,welcome" ] else : return [b "user or pwd is wriong" ] |
templates目录下的html文件:
alex.html
1
2
3
4
5
6
7
8
9
10
11
12
|
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < meta http-equiv = "x-ua-compatible" content = "IE=edge" > < meta name = "viewport" content = "width=device-width, initial-scale=1" > < title >Title</ title > </ head > < body > < div >alex</ div > </ body > </ html > |
login.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!DOCTYPE html> <html lang = "en" > <head> <meta charset = "UTF-8" > <title>Title< / title> < / head> <body> <h2>登录页面< / h2> <form action = "http://127.0.0.1:9700/auth" > <p>姓名:< input type = "text" name = "user" >< / p> <p>密码:< input type = "password" name = "pwd" >< / p> <p> < input type = "submit" > < / p> < / form> < / body> < / html> |
下面如图,是目录结构
访问ip+prot+路径 即为相应的html,功能简单,只是为了熟悉django
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://www.cnblogs.com/ArmoredTitan/p/7412573.html