• Django框架简介


     Django框架简介

    MVC框架和MTV框架

    MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

    想要更详细的了解MVC模式? >> 点我

    Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。

    Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

    Django的MTV模式

           Model(模型):负责业务对象与数据库的对象(ORM)

           Template(模版):负责如何把页面展示给用户

           View(视图):负责业务逻辑,并在适当的时候调用Model和Template

    此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

    Django框架图示

    Django安装和基本使用

    安装Django,指定国内pip源

    pip3 install django==1.11.18 -i https://pypi.douban.com/simple/

    Django官网下载页面

    创建Django项目

    下面的命令创建了一个名为"webapp"的Django 项目:

    django-admin startproject webapp

    项目创建完成,会在当前目录下生成一个目录

    webapp/
    ├── manage.py  # 管理文件
    └── mysite    # 项目目录
        ├── __init__.py
        ├── settings.py  # 配置
        ├── urls.py  # 路由 --> URL和函数的对应关系
        └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server

    运行Django项目:

    默认是8000端口

    [root@yunwei-test webapp]# python3 manage.py runserver 0.0.0.0:9999

    pycharm创建Django项目

    pycharm会自动创建模板目录

    启动项目

     

    Django settings

    # 项目根目录
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # ip地址访问权限
    ALLOWED_HOSTS = ['*']   
    
    # app注册列表
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    
    # 中间件
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    
    # 模板文件(HTML文件)
    TEMPLATES [{
     'DIRS': [os.path.join(BASE_DIR, 'templates')]  # HTML文件路径,pycharm会自动创建和添加。 命令行创建项目需要自己添加
    }]
    
    
    # 数据库配置
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',        #  数据库类型
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    # 要连接的库
        }
    }
    
    
    # 静态文件别名,以/static/开头
    STATIC_URL = '/static/' 
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static')   # 实际的静态文件目录路径
    ]
    django配置文件

    Django创建 app

    一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。

    python manage.py startapp app01

    执行命令后,项目目录下多出一个app01的文件夹,目录结构如下:

    [root@yunwei-test webapp]# tree app01/
    app01/
    ├── admin.py        #  admin管理后台
    ├── apps.py         #  app
    ├── __init__.py  
    ├── migrations        # 数据库迁移的文件
    │   └── __init__.py    
    ├── models.py        # ORM
    ├── tests.py      
    └── views.py        #  函数功能

     在settings配置文件中注册app

    # 在app列表中添加上
    INSTALLED_APPS = [ 'app01.apps.App01Config' ]

    Django函数

    from django.shortcuts import HttpResponse, render, redirect

    参数

    必须接受一个参数 request

    所有和浏览器请求相关的都在 request 中
    request.method  GET POST(大写)       # 获取请求方式
    request.POST.
    get('input中的name属性值') # 获取form表单提交的数据,字符串类型(form表单使用POST提交时)
    request.GET              # url地址上携带的参数 例如:http:
    //127.0.0.1/login/?user=xxx&pwd=xxx 获取到的数据: <QueryDict: {'user': ['xxx'], 'pwd': ['xxx']}>

    request.path_info                # url路径
    
    

    返回值

    必须是一个HttpResponse对象

     

    HttpResponse

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

    例如:

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

     

    render

    除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。

    将数据填充进模板文件,最后把结果返回给浏览器。(类似于我们上面用到的jinja2)

    例如:

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

     

    redirect重定向

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

    例如:

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

    重定向

    return redirect('/home/')
     返回浏览器状态码:302   和响应头:Location: /home/
    浏览器会再次向返回的URL地址发起一次GET请求,获取跳转后的页面。
     

     

  • 相关阅读:
    文件IO学习
    简单哈希表学习
    关于二叉树的遍历
    关于多点共线问题
    关于线程
    时间复杂度O()与KMP算法
    单链表相关
    拷贝构造函数与深浅拷贝
    在windows把python写成bat文件的坑
    python学习手册:第二十五章——oop
  • 原文地址:https://www.cnblogs.com/root0/p/10751020.html
Copyright © 2020-2023  润新知