zoukankan      html  css  js  c++  java
  • web框架本质及Django的安装

    web框架本质

      我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了

      可以说Web服务本质上都是在这十几行代码基础上扩展出来的。这段代码就是它们的祖宗。

    HTTP协议主要规定了客户端和服务端之间的通信格式

    所以我们收发消息需要严格按照HTTP格式来

    自定义最基础的web框架

    from  socket import *
    
    server=socket(AF_INET,SOCK_STREAM)
    server.bind(("127.0.0.1",8080))
    server.listen()
    
    while True:
        conn,addr=server.accept()
        date=conn.recv(1024)
        conn.send(b"HTTP/1.1 200 OK
    
    <h1>objk</h1>")
        conn.close()

    根据不同的路径返回不同的内容

    import socket
    
    server=socket.socket()
    server.bind(("127.0.0.1",8080))
    server.listen()
    
    while True:
        conn,addr=server.accept()
        date=conn.recv(1024)
        #转换成str类型
        date=str(date,encoding="utf8")
        #获取url中的访问路径
        date1=date.split("
    ")[0].split(" ")[1]
        print(date1)
        #http协议返回消息也要加状态行
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        if date1=="/home/":
            response=b"home"
        elif date1=="/index/":
            response=b"index"
        else:
            response=b"<h1>ojbk</h1>"
        conn.send(response)
        conn.close()

    根据不同的路径返回不同的内容(函数版)

    import socket
    
    server=socket.socket()
    server.bind(("127.0.0.1",8080))
    server.listen()
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="gbk")
    
    def index(url):
        return b"index"
    
    while True:
        conn,addr=server.accept()
        date=conn.recv(1024)
        #转换成str类型
        date=str(date,encoding="utf8")
        #获取url中的访问路径
        date1=date.split("
    ")[0].split(" ")[1]
        #http协议返回消息也要加状态行
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        if date1=="/home/":
            response=home(date1)
        elif date1=="/index/":
            response=index(date1)
        else:
            response=b"<h1>ojbk</h1>"
        conn.send(response)
        conn.close()

    根据不同的路径返回不同的内容(函数升级版)

    import socket
    
    server=socket.socket()
    server.bind(("127.0.0.1",8000))
    server.listen()
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="gbk")
    
    def index(url):
        return b"index"
    
    while True:
        conn,addr=server.accept()
        date=conn.recv(1024)
        #转换成str类型
        date=str(date,encoding="utf8")
        #获取url中的访问路径
        date1=date.split("
    ")[0].split(" ")[1]
        #http协议返回消息也要加状态行
        url_list=[
            ("/home/",home),
            ("index",index),
                  ]
        fuck=None
        for i in url_list:
            if date1==i[0]:
                fuck=i[1]
                break
        if fuck:
            response=fuck(date1)
        else:
            response = b"404 not found!"
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        conn.send(response)
        conn.close()

    加入html文件

    import socket
    
    server=socket.socket()
    server.bind(("127.0.0.1",8000))
    server.listen()
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="gbk")
    
    def index(url):
        return b"index"
    def login(url):
        with open("登录页面.html","r",encoding="utf8")as f:
            s=f.read()
        return bytes(s, encoding="utf8")
    
    while True:
        conn,addr=server.accept()
        date=conn.recv(1024)
        #转换成str类型
        date=str(date,encoding="utf8")
        print(date)
        #获取url中的访问路径
        date1=date.split("
    ")[0].split(" ")[1]
        print(date1)
        #http协议返回消息也要加状态行
        url_list=[
            ("/home/",home),
            ("/index/",index),
            ("/login/",login)
                  ]
        fuck=None
        for i in url_list:
            if date1==i[0]:
                fuck=i[1]
                break
        if fuck:
            response=fuck(date1)
        else:
            response = b"404 not found!"
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        conn.send(response)
        conn.close()

    终极暗黑无敌版

    import socket
    import time
    
    server=socket.socket()
    server.bind(("127.0.0.1",8000))
    server.listen()
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="gbk")
    
    def index(url):
        return b"index"
    
    def login(url):
        with open("登录页面.html","r",encoding="utf8")as f:
            s=f.read()
        return bytes(s, encoding="utf8")
    
    def user(url):
        now_time=str(time.time())
        with open("user.html","r",encoding="utf8")as f:
            s=f.read()
            s=s.replace("@@xx@@",now_time)
        return bytes(s, encoding="utf8")
    
    while True:
        conn,addr=server.accept()
        date=conn.recv(1024)
        #转换成str类型
        date=str(date,encoding="utf8")
        print(date)
        #获取url中的访问路径
        date1=date.split("
    ")[0].split(" ")[1]
        print(date1)
        #http协议返回消息也要加状态行
        url_list=[
            ("/home/",home),
            ("/index/",index),
            ("/login/",login),
            ("/user/",user)
                  ]
        fuck=None
        for i in url_list:
            if date1==i[0]:
                fuck=i[1]
                break
        if fuck:
            response=fuck(date1)
        else:
            response = b"404 not found!"
        conn.send(b"HTTP/1.1 200 OK
    
    ")
        conn.send(response)
        conn.close()

    wsgiref实例

    from wsgiref.simple_server import make_server
    import time
    
    
    def home(url):
        s = "这是{}页面!".format(url)
        return bytes(s, encoding="gbk")
    
    def index(url):
        return b"index"
    
    def login(url):
        with open("登录页面.html","r",encoding="utf8")as f:
            s=f.read()
        return bytes(s, encoding="utf8")
    
    def user(url):
        now_time=str(time.time())
        with open("user.html","r",encoding="utf8")as f:
            s=f.read()
            s=s.replace("@@xx@@",now_time)
        return bytes(s, encoding="utf8")
    
    
    url_list=[
        ("/home/",home),
        ("/index/",index),
        ("/login/",login),
        ("/user/",user)
              ]
    def run_server(environ,start_response):
        start_response("200 OK",[('Content-Type','text/html;charset=utf8'),])
        url = environ['PATH_INFO']
        fuck=None
        for i in url_list:
            if url==i[0]:
                fuck=i[1]
                break
        if fuck:
            response=fuck(url)
        else:
            response = b"404 not found!"
        return [response,]
    
    if __name__ == '__main__':
        httpd=make_server('127.0.0.1',8090,run_server)
        print('我在8090等你哦。。。')
        httpd.serve_forever()

    Django

    安装Django

    1.在cmd命令行中敲入命令

    pip3 install django==1.11.9

    2.在pyCharm中直接下载

    创建一个django项目

    1.在cmd命令行中敲入命令

    django-admin startproject mysite

    2.打开pyCharm中的File--->new project--->选中Django--->创建一个新的项目即可

    运行Django项目

    1.在cmd命令行中敲入命令

    python manage.py runserver 127.0.0.1:8000

    2.点一下下图的绿色按钮(一般都在pyCharm的左上方 和 右上方)

    静态文件配置

    STATIC_URL = '/static/'  # HTML中使用的静态文件夹前缀
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
    ]

    Django基础必备三件套:

    from django.shortcuts import HttpResponse, render, redirect

    HttpResponse:内部传入一个字符串参数,返回浏览器

    例如:

    def index(request):
        # 业务逻辑代码
        return HttpResponse("OK")

    render:接受一个URL参数,表示跳转到指定的URL。

    例如:

    def index(request):
        # 业务逻辑代码
        return render(request, "index.html", {"name": "alex", "hobby": ["烫头", "泡吧"]})

    redirect:接受一个URL参数,表示跳转到指定的URL。

    例如:

    def index(request):
        # 业务逻辑代码
        return redirect("/home/")

     

     

  • 相关阅读:
    Using zend-paginator in your Album Module
    Using zend-navigation in your Album Module
    Unit Testing a zend-mvc application
    Conclusion
    Forms and actions
    Database and models
    Routing and controllers
    Modules
    Java开发的基础条件:
    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错
  • 原文地址:https://www.cnblogs.com/yftzw/p/9169053.html
Copyright © 2011-2022 走看看