zoukankan      html  css  js  c++  java
  • Django介绍

    django推导思路

    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(b'HTTP/1.1 200 OK
    
    ')
        print(data)
        data = data.decode('utf-8')
        current_path = data.split('
    ')[0].split(' ')[1]
        if current_path == '/index':
            # conn.send(b'<h1>hello baby!</h1>')
            with open('web.html','rb') as f:
                conn.send(f.read())
        else:
            conn.send(b'404')
        conn.close()
    纯手写的web框架
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
        <script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
    <h1>Hello World</h1>
    </body>
    </html>
    web.html
    from wsgiref.simple_server import make_server
    from urls import urls
    from views import *
    
    
    def run(env,response):
        print(env)  # 是个字典类型
        # 固定写法
        response('200 OK',[])  # 列表里面放的是请求首行的信息,可以不放,但是必须写
        # 获取当前用户访问路径
        current_path = env.get('PATH_INFO')
        # 定义一个函数标志位
        func = None
        for url_list in urls:  # urls:[[],[],[]]  url_list:['',func]
            if current_path == url_list[0]:
                func = url_list[1]
                # 结束for循环了
                break
        if func:
            res = func(env)
        else:
            # 匹配不上 走error
            res = error(env)
        return [res.encode('utf-8')]
    
    
    if __name__ == '__main__':
        server = make_server('127.0.0.1',8888,run)
        server.serve_forever()
    基于wsgiref实现服务端.py
    from views import *
    
    urls = [
        ['/index',index],
        ['/login',login],
        ['/reg',reg],
        ['/get_time',get_time],
        ['/xxx',get_user],
        ['/get_db',get_db_info]
    ]
    urls.py
    from datetime import datetime
    from jinja2 import Template
    import pymysql
    
    
    def index(env):
        with open('templates/index.html','r',encoding='utf-8') as f:
            data = f.read()
        return data
    
    def login(env):
        return 'login'
    
    def error(env):
        return '404 error'
    
    def reg(env):
        return 'reg'
    
    def get_time(env):
        ctime = datetime.now().strftime('%Y-%m-%d %X')
        # 打开文件
        with open('templates/get_time.html','r',encoding='utf-8') as f:
            data = f.read()
        res = data.replace('@@time@@',ctime)
        return res
    
    def get_user(env):
        user = {'name':'jason','age':'18'}
        with  open('templates/get_user.html','r',encoding='utf-8') as f:
            data = f.read()
        tmp = Template(data)
        res = tmp.render(data=user)
        return res
    
    def get_db_info(env):
        conn = pymysql.connect(
            host = '127.0.0.1',
            port = 3306,
            user = 'root',
            password = '123321',
            database = 'test007',
            charset = 'utf8',
            autocommit = True
        )
        cursor = conn.cursor(pymysql.cursors.DictCursor)
        cursor.execute('select * from userinfo')
        user_list = cursor.fetchall()
        # 打开文件渲染到前端页面
        with open('templates/get_db_user.html','r',encoding='utf-8') as f:
            data = f.read()
        tmp = Template(data)
        res = tmp.render(user_list=user_list)
        return res
    views.py

    templates文件夹存放html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
    </head>
    <body>
    <div class="container">
        <div class="row">
            <table class="table table-bordered table-hover table-striped">
                <thead>
                    <tr>
                        <th>id</th>
                        <th>name</th>
                        <th>age</th>
                    </tr>
                </thead>
                <tbody>
                    {% for data in user_list %}
                    <tr>
                        <td>{{data.id}}</td>
                        <td>{{data.name}}</td>
                        <td>{{data.age}}</td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
    </body>
    </html>
    get_user.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
        <script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
    @@time@@
    </body>
    </html>
    get_time
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
        <script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
    <h1>{{ data }}</h1>
    <h1>{{ data.name }}</h1>
    <h1>{{ data['name'] }}</h1>
    <h1>{{ data.get('name') }}</h1>
    <h1>{{ data.age }}</h1>
    </body>
    </html>
    get_user.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="bootstrap-3.3.7/css/bootstrap.min.css">
        <script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
    <h1>index</h1>
    </body>
    </html>
    index.html

    web服务执行流程

     浏览器发送二进制遵循http协议的数据,服务器接收先url匹配,在执行视图函数,视图函数中调用模版和数据库数据渲染。

    python三大主流web框架

    """
    a:socket通信
    b:路由与视图
    c:模版渲染
    
    django:a用的别人的wsgiref,b:自己写的,c:自己写的
    flask:a用的别人的werkzeug,b:自己写的,c:用了别人的jinja2
    tornado:a自己写的,b:自己写的,c:自己写的
    """

    django的安装

    #注意事项:
    - django安装版本建议1.11左右
    - 计算机名称不能是中文(尤其要注意),改名重启即可!
    - django安装命令pip install django==1.11.11
    - 文件夹不要再以dayxx多层叠加,一个项目就是一个单独的pycharm窗口
        命令行创建django项目
            django-admin startproject mysite
        命令行创建app
            python manage.py startapp 应用名
        命令行启动django
            python manage.py runserver
      用命令行创建的时候,默认没有templates文件夹,需要你自己手动创建
        并且在settings配置文件中写上路径
        
    pycharm下载
        点加号 选版本
        创建new project选第二个django项目(选本机环境,暂时不要选虚拟环境)
        两种创建app的方式:
            python manage.py startapp 应用名
            tools下面的run manage.py 能够简写并自动提示
        运行方式
            python manage.py runserver
            pycharm自动启动

    模块文件配置

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, "template")],  # template文件夹位置
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]

    static静态文件配置

    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
    ]

    目录介绍

    app01
        migrations    #数据库迁移记录相关
        models.py   #orm模型类
        views.py     #视图函数
        templates    #放html文件
    manage.py  # 管理文件
        mysite  # 项目目录
            __init__.py
            settings.py  # 配置
            urls.py  # 路由 --> URL和函数的对应关系
            wsgi.py  # runserver命令就使用wsgiref模块做简单的web serve

    django小白必会三板斧

    1. HttpResponse 返回字符串
    2. render 渲染页面并返回
    3. redirect 重定向
  • 相关阅读:
    Git理解
    Java基础之四、字符和字符串 异常处理
    魔方第三层复原技巧
    Java基础之三、类的特性和接口
    Java基础之二、类的知识
    Java基础之一、入门知识
    UML之三、建模元素(2)
    看懂棒球-规则、数据
    【转载】自助终端设备安全剖析 (深度好文)
    CVE-2017-12615 Tomcat远程代码执行
  • 原文地址:https://www.cnblogs.com/ShenJunHui6/p/10690985.html
Copyright © 2011-2022 走看看