2.8.5Django --3.1 自己DIV一个WEB框架

Django目录:https://blog.****.net/qq_41106844/article/details/105554082

源码地址:https://github.com/hanxuan-doco/back_end/tree/master/div_web

首先定好目录树:

div_web

    manage.py:启动文件

    urls.py:路由表文件

    app:存放实现数据库操作的文件的文件夹。

        models.py:连接数据库,初始化数据库。

        views.py:存放页面路径相对应的方法。

    templates:存放静态文件

        login.html:登录页面

        backend.html:登录成功的页面

 

整个框架的运行流程为:manage.py启动整个框架,他会检索用户浏览的路径,如果浏览为/login路径,那么去urls.py中路由表检索这个路径对应的函数。

之后去views.py中找到与之配套的函数,如果这是一个get请求,那么读取templates中的login.html页面内容返回。

如果这是一个post请求,接受页面form表单返回的数据,与数据库进行比对,如果通过比对,返回backend.html页面,表示登录成功,如果没有登录成功,返回user or pwd is wrong。

注:这里判断请求方式是通过获取environ中的REQUEST_METHOD参数。

models.py用来建表,没有太大意义。

 

manage.py

运行文件程序与我们上一节基本一致,不在赘述。

from wsgiref.simple_server import make_server

from app.views import *

import urls

 

def routers():

    URLpattern=urls.URLpattern

    return URLpattern

 

def applications(environ,start_response):

    path=environ.get("PATH_INFO")

    start_response('200 OK', [('Content-Type', 'text/html'),('Charset', 'utf8')])

    urlpattern=routers()

    func=None

    for item in urlpattern:

        if path == item[0]:

            func=item[1]

            break

    if func:

        #这里的func是login,传参之后便是  login(environ)

        return [func(environ)]

    else:

        return [b"<h1>404!<h1>"]

 

if __name__ =='__main__':

    server=make_server("",8889,applications)

    print("server is working...")

    server.serve_forever()

 
2.8.5Django --3.1 自己DIV一个WEB框架
 

 

urls.py

用来存放路由表的文件

from app.views import *

 

URLpattern = (

    ("/login", login),

)

 
2.8.5Django --3.1 自己DIV一个WEB框架
 

 

views.py

views.py用来存放路由表相对的函数。

login函数大体分为两部分,第一部分是当请求为post请求时,会处理页面请求的数据。如果为get请求时,会返回login.html的页面内容。

当请求为post请求时,会先使用get取出environ中的CONTENT_LENGTH,既数据部分的内容,如果没有数据部分,就给他赋一个0的value。

之后读取user和pass,与数据库userinfo表做比较,如果这对数据再表中,则返回backend.html页面内容,如果不在,则返回user or pwd is wrong这句话。

import pymysql

from urllib.parseimport parse_qs

 

def login(request):

    if request.get("REQUEST_METHOD")=="POST":

        try:

            request_body_size =int(request.get('CONTENT_LENGTH', 0))

        except (ValueError):

            request_body_size =0

        request_body = request['wsgi.input'].read(request_body_size)

        data = parse_qs(request_body)

        user=data.get(b"user")[0].decode("utf8")

        pwd=data.get(b"pwd")[0].decode("utf8")

        conn = pymysql.connect(host='127.0.0.1',port=3306,user ='root',passwd=' ',db='web')

        cur = conn.cursor()

        SQL="select * from userinfo WHERE NAME ='%s' AND PASSWORD ='%s'"%(user,pwd)

        cur.execute(SQL)

        if cur.fetchone():

            f=open("templates/backend.html","rb")

            data=f.read()

            data=data.decode("utf8")

            return data.encode("utf8")

        else:

            print("OK456")

            return b"user or pwd is wrong"

    else:

        f =open("templates/login.html", "rb")

        data = f.read()

        f.close()

        return data

 
2.8.5Django --3.1 自己DIV一个WEB框架
 

 

login.html

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>Title

<h4>登录页面

<form action="" method="post">

    用户名 <input type="text" name="user">

    密码 <input type="text" name="pwd">

    <input type="submit">

</html>

 
2.8.5Django --3.1 自己DIV一个WEB框架
 
 
2.8.5Django --3.1 自己DIV一个WEB框架
 

 

 

backend.html

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>Title

<h4>welcome to jianshu!

</html>

 
2.8.5Django --3.1 自己DIV一个WEB框架
 
 
2.8.5Django --3.1 自己DIV一个WEB框架