zoukankan      html  css  js  c++  java
  • django

    动静态网页

    • 静态网页

      静态页面是单纯用HTML或XML写的,数据的修改都是人为的。

    • 动态网页

      动态页面是结合其他语言,如:HTML+ASP 或HTML+ASP.NET或 HTML+PHP 或 HTML+JSP 等

      数据是动态获取的或者从数据库获取。

    Python三大主流Web框架

    所有的web应用本质上就是一个socket服务端,而用户浏览器就是一个socket客户端。

    自己可以实现简单的web框架,接收HTTP请求、响应HTTP请求,但使用web框架会更加简便。

    python中主流的web框架,主要有三种:

    django

    大型的框架,自带的组件和功能非常多

    强大的功能之外不足之处:比较笨重

    • socket服务器部分用的是第三方模块wsgiref
    • 路由层自己实现
    • 模板语法自己实现

    flask

    短小精悍,自带组件非常少

    基本全部依赖于第三方组件,受限于第三方组件

    如果将flask所有第三方模块加起来,可以盖过django

    • socket服务器部分用的第三方模块werkzeug
    • 路由层自己实现
    • 模板语法利用第三方模块Jinja2

    tornado

    异步非阻塞的一个框架,可以用来开发游戏服务器,效率非常高。

    • socket服务器自己实现
    • 路由层自己实现
    • 模板语法自己实现

    wsgiref模块

    web应用过程,如果由我们自己来实现是复杂的,接收HTTP请求,解析HTTP请求,响应HTTP请求等。通常这些操作都由WSGI服务器来完成,WSGI(Web Server Gateway Interface)定义了WSGI服务器执行的接口,我们只需要编写服务WSGI规范的接口,然后由WSGI服务器来执行,就可以了。

    from wsgiref.simple_server import make_server
    from urls import urls
    from views import *
    
    def run(env,response):
        """
        :param env: 请求相关的所有数据 将http数据全部提前处理成了字典的形式 供调用者使用
        :param response: 响应相关的所有数据
        :return: 给前端真正的数据
        """
        response('200 OK',[('xxx','jason'),])
        current_path = env.get('PATH_INFO')
      
        func = None
        for url in urls: 
            if current_path == url[0]:  # 用户敲的后缀名 你后端有对应的处理业务
                func = url[1]  # 将匹配上的函数名赋值给func变量
                break  # 一旦用户匹配上了对应的业务接口 立刻结束匹配
    
        if func:
            res = func(env)
        else:
            res = error(env)
        return [res.encode('utf-8'),]
    
    
    if __name__ == '__main__':
        server = make_server('127.0.0.1',8080,run)  # 实时监听本机8080端口
        # 一旦有请求来了 会统一交给run函数处理(调用run函数并传参run(env,response))
        server.serve_forever()  # 启动服务端
    

    jinja2模块

    Jinja2是专门用来处理后端数据与html页面的交互。jinja2的模板语法,极其贴近python后端语法,让用户在html页面上,也能够用后端python语法来操作后端传递过来的数据

    注意:模板的渲染是将后端传递给html文件的数据,在后端处理好,生成一个完整的html文件的过程,这是在后端完成的,跟前端没有关系

    # jinja2的字典取值方式
    <p>{{ userDic }}</p>
    <p>{{ userDic.username }}</p>
    <p>{{ userDic['age'] }}</p>
    <p>{{ userDic.get('hobby') }}</p>
    <p>{{ userDic.get('hobby').0 }}</p>
    <p>{{ userDic.get('hobby').1 }}</p>
    <p>{{ userDic.get('hobby').2 }}</p>
    
    
    # jinja2的for循环
    {% for user_dic in user_list %}
        <tr>
        <td>{{ user_dic.id }}</td>
        <td>{{ user_dic.username }}</td>
        <td>{{ user_dic.password }}</td>
        </tr>
    {% endfor %}
    

    Django

    创建Django项目

    安装Django之前注意:

    1. 计算机名称不能有中文
    2. python解释器不要使用3.7版本 推荐使用版本3.4~3.6
    3. 一个pycharm窗口 只能跑一个项目
    4. 版本尽量安装稳定版,本教程将以1.11.11版本为主。

    命令行创建

    1. 安装Django
      pip3 install django

    2. 切换到合适的路径下,创建django项目
      django-admin startproject 项目名(例如mysite)

    3. 切换到项目文件夹下,启动django项目
      python3 manage.py runserver
      python3 manage.py runserver 127.0.0.1:8080

    4. 创建应用(django支持多app开发)
      python3 manage.py startapp app名(例如app01)

      用命令行创建项目需要注意:

      1. 不会自动帮你创建templates文件夹
      2. 配置文件中不会自动帮你书写templates文件路径

    pycharm创建

    1. 安装Django

      直接用settings-project interpreter 安装Django

      或者是语句pip install django

    2. 新建项目

      img

    setting配置文件:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01.apps.App01Config',       # 如果新建的app没有,这里要加上
    ]
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,"templates")],   # 如果这里的路径是空的,要手动加
            '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',
                ],
            },
        },
    ]
    

    Django目录介绍

    mysite/
    ├── manage.py  # 管理文件
    └── mysite  # 项目目录
        ├── __init__.py
        ├── settings.py  # 配置
        ├── urls.py  # 路由 --> URL和函数的对应关系
        └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server
    └── app01  # 应用目录
        ├── __init__.py
        ├── admin.py   # django admin后台管理
        ├── apps.py    # 放所有app的逻辑函数
        ├── models.py  # 放所有数据库相关的模型类
        ├── tests.py   # 存放测试文件
        └── views.py   # 处理业务逻辑的视图函数
      
    

    运行Django项目

    python manage.py runserver 127.0.0.1:8000
    

    Django基础三板斧

    from django.shortcuts import HttpResponse,render,redirect
    

    HttpResponse

    内部传入一个字符串的参数,将会返回给浏览器

    例如:

    def index(request):
        # 业务逻辑代码
        return HttpResponse("正常访问了")
    

    render

    可以接收多个参数

    第一个参数接收request

    第二个参数填写一个待渲染的模板文件(html文件)

    第三个参数写一个保存具体数据的字典

    意思是将数据填充进模板文件,最后将结果返回给浏览器,类似于Jinja2模板,注意,这里的reder使用的模板语法,在html文件中可以使用python的字典语法取值,是python后端处理完成之后再发送到html的,最后才将结果返回给浏览器。

    例如:

    def index(request):
        # 业务逻辑代码
        return render(request,"index,html",{"name":"qinyj","hobby":["run","jump"]})
    

    redirect

    接收一个URL参数,意思是可以重定向到指定的URL地址

    例如:

    def index(request):
        # 业务逻辑代码
        return redirect("https://www.baidu.com")
    
  • 相关阅读:
    2019 荔枝java面试笔试题 (含面试题解析)
    2019 乐游网络java面试笔试题 (含面试题解析)
    2019 吉比特java面试笔试题 (含面试题解析)
    2019 拉卡拉java面试笔试题 (含面试题解析)
    2019 东方财富网java面试笔试题 (含面试题解析)
    2019 途牛旅游网java面试笔试题 (含面试题解析)
    2019 263云通信java面试笔试题 (含面试题解析)
    2019 贝壳找房java面试笔试题 (含面试题解析)
    偶分频、奇分频、任意整数分频
    PWM呼吸灯
  • 原文地址:https://www.cnblogs.com/shin09/p/11909214.html
Copyright © 2011-2022 走看看