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

Django目录:https://blog.csdn.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()

 
20155953-38c7f966dd50469a.png
 

 

urls.py

用来存放路由表的文件

from app.views import *

 

URLpattern = (

    ("/login", login),

)

 
20155953-29c5d5eb2ecc7985.png
 

 

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

 
20155953-cd52beeb2698cb5f.png
 

 

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>

 
20155953-c7eb3ba1102cbc0d.png
 
 
20155953-2f2414aecc2e5d8d.png
 

 

 

backend.html

<!DOCTYPE html>

<html lang="en">

    <meta charset="UTF-8">

    <title>Title

<h4>welcome to jianshu!

</html>

 
20155953-5da42c783ef6281d.png
 
 
20155953-351b8261cc2a662c.png
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值