zoukankan      html  css  js  c++  java
  • web框架

    1.web框架的本质

    在web浏览中, 浏览器相当于客户端, 对web的操作相当于编写服务器
    最基本的web服务器代码为
    import socket
    server=socket.socket()
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    while True:
        conn,addr=server.accept()
        data=conn.recv(1024)
        conn.send('HTTP1.1/1.1 200 OK 
    
    '.encode('utf8'))
        conn.send('hello world'.encode('utf8'))
        conn.close()
    

    解析HTTP的请求报文

    请求头和请求体用 分割

    请求头中的每一行用 分割

     

    2.基本框架的改进

    (1)限制URL

    通过分析请求头,获得请求头的URL,用URL来返回不同的数据

    import socket
    server=socket.socket()
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    while True:
        conn,addr=server.accept()
        data=conn.recv(1024).decode('utf8')
        header,bodys=data.split('
    
    ')
        ##请求头与请求体用
    
    分割
        headerlist=header.split('
    ')
        ##请求头以
    分割
        method,url,protocal=headerlist[0].split(' ')
        ##获取请求头的首行
        conn.send('HTTP1.1/1.1 200 OK 
    
    '.encode('utf8'))
        if url=='/index':
            conn.send('main page'.encode('utf8'))
            ##限制URL
        else:
            conn.send('404'.encode('utf8'))

    (2)将URL封装

    import socket
    server=socket.socket()
    server.bind(('127.0.0.1',8080))
    server.listen(5)
    
    def f1():
        conn.send('main page'.encode('utf8'))
    
    def f2():
        conn.send('hello world'.encode('utf8'))
    
    routers=[
        ('/index',f1),
        ('/hi',f2)
    ]
    while True:
        conn,addr=server.accept()
        data=conn.recv(1024).decode('utf8')
        header,bodys = data.split('
    
    ')
        headerlist = header.split('
    ')
        method, url, protocal = headerlist[0].split(' ')
        conn.send('HTTP1.1/1.1 200 OK 
    
    '.encode('utf8'))
        func_name=None
        for item in routers:
            if item[0]==url:
                func_name=item[1]##限制URL,对应字典中的value,触发函数的执行
                break
        if func_name:
            func_name()
        else:
            conn.send('404'.encode('utf8'))
        conn.close()
    

    (3)通过读取文件返回HTML页面

    def f3():
        with open('login.html','rb')as f:
            conn.send(f.read())
    
    routers=[
        ('/index',f1),
        ('/hi',f2),
        ('/wapper',f3)
    ]
    

    (4)通过替换特殊字符串来动态返回HTML页面

    def f4():
        with open('login.html','rb')as f:
            data=f.read()
        import time
        ctime=time.time()
        data=data.replace(b'@@@ctime@@@',b'ctime')
        conn.send(data)
    routers=[
        ('/index',f1),
        ('/hi',f2),
        ('/wapper',f3),
        ('/time',f4)
    ]
    

    (5)读取数据库的表,获得数据库的数据并显示

    (6)使用jinjia2来替换动态内容

     

    3.框架的分类

    4.Django框架

    4.1创建基本Django项目

    (1)安装

    pip3 install django
       
    添加环境变量
    一般安装到Python的scripts的文件夹下
    将scripts文件夹添加到环境变量
    C:Python36Scriptsdjango-admin

    创建一个项目

    django-admin startproject 项目名
    

    进入该项目目录中

    python manage.py runserver IP地址:端口
    

    如果不带上IP地址和端口, 默认是本地地址, 端口为8000

     

    4.2用IDE创建Django项目

    项目结构相同
    │  db.sqlite3
    │  manage.py          项目启动管理PY文件

    └─项目名
        │  settings.py        项目配置文件
        │  urls.py                路由配置
        │  wsgi.py                
        │  __init__.py
        │
        └─__pycache__
     
    (1)配置URL urls.py
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^login/', login),##后面一定要加逗号!!
    ]
    

    (2)配置处理 函数urls.py

    from django.conf.urls import url
    from django.contrib import admin
    
    from django.shortcuts import HttpResponse,render,redirect
    def login(request):#处理用户请求 并且返回结果
    #至少有一个参数
    # request 用户请求相关的所有信息(对象)
    
        # return HttpResponse('login')    #HttpResponse里面只能加字符串
    # 返回用户所需要的信息
        # return HttpResponse('<input>')#也可以返回一个标签,或者文件
        if request.method=="GET":
            return render(request,'login.html')
        else:
            print(request.POST)#用户名密码字典都放在POST里面
        #获取
            u=request.POST.get("username")
            p=request.POST.get("password")
            if u=="root" and p=="123123":
                return redirect('http://www.oldboyedu.com/')##跳转地址
                #登录成功
            else:
                return render(request,'login.html',{'msg':'用户名或密码错误'})
                #登录失败
    #render默认自动查找模板路径下的login.html文件
    #读取内容并返回给用户
    

    (3)使用render的模板文件配置settings.py

    'DIRS': [os.path.join(BASE_DIR, 'templates')]
     一般地, 模板文件放在templates文件中, 配置这个之后就能找到该文件了
     
    (4)配置静态文件目录 settings.py
    <link rel="stylesheet" href="/static/com.css">
     --STATIC_URL = '/static/'
     STATICFILES_DIRS=(
         os.path.join(BASE_DIR,'sta'),
     )
    
  • 相关阅读:
    智慧养老民政监管平台建设方案
    CF600E Lomsat gelral dsu on tree
    dsu on tree详解
    【Spring 从0开始】Spring5 新功能,整合日志框架 Log4j2
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 数据库事务参数
    【Spring 从0开始】JdbcTemplate 数据库事务管理
    【Spring 从0开始】JdbcTemplate 操作数据库
    【Spring 从0开始】AOP 操作
    【Spring 从0开始】AOP 操作中的相关术语、环境准备
  • 原文地址:https://www.cnblogs.com/asaka/p/7011509.html
Copyright © 2011-2022 走看看