zoukankan      html  css  js  c++  java
  • [原创]Django 框架简介

    Django 框架简介

    1.下载&安装

    # 法一:
    pip install Django==1.10.2 # 版本号
    
    # 法二:
    git clone https://github.com/django/django.git # 最新开发版
    
    # 法三:
    官网右侧下载 tar.gz 包
    

    1.2.验证是否安装

    # 法一:
    python -m django --version   # 得到版本号
    
    # 法二:
    python3
    >>> import django   # 不报错
    

    2.创建项目

    django-admin startproject myblog   # 不报错就创建成功了
    

    2.1.项目目录、文件说明

    • 项目根目录:
    < manage.py 文件 >
    	# 项目管理器,与项目进行交互的命令行工具集的入口
    
    python manage.py --help   # 有很多子命令
    python manage.py runserver 9999   # 启动服务,指定端口端口为 9999,不指定端口时默认为 8000
    
    < myblog 目录 >
    	# 项目的一个容器
    	# 包含项目最基本的一些配置
    
    < wsgi.py >
    	# WSGI(Python Web Server Gateway Interface)
      # Python 服务器网管接口
      # Python 应用与 Web 服务器之间的接口
    
    < urls.py >
    	# URL 配置文件
      # Django 项目中所有地址(页面)都需要我们自己去配置其 URL
    
    < settings.py >
      # 项目的总配置文件
      # 里面包含了数据库、Web应用、时间等各种配置
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
      # 整个项目的根目录
    SECRET_KEY = 'hfusaf2m4ot#7)fkw#di2bu6(cv0@opwmafx5n#6=3d%x^hpl6'
      # 安全码,防止跨站脚本攻击,创建项目时 Django 自动生成
    DEBUG = False
      # 生产中不要打开,因为错误信息会直接抛给前端用户,不友好
    ALLOWED_HOSTS = ['*']
      # 允许访问的客户端IP
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
            'django_q',
            'sql',
            'themis',
            'common',
            )
              # 我们写的程序都要写进来
    MIDDLEWARE = (
        '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',
        'django.middleware.security.SecurityMiddleware',
        'common.middleware.check_login_middleware.CheckLoginMiddleware',
        'common.middleware.exception_logging_middleware.ExceptionLoggingMiddleware',
        )
           # 中间件
    ROOT_URLCONF = 'archery.urls'
          # URL 配置根文件
    TEMPLATES = [
        {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'common/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',
        'common.utils.global_info.global_info',
                ],
            },
        },
    ]
            # 模板配置
    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
    USE_I18N = True
    USE_TZ = False
           # 国际化相关
    AUTH_PASSWORD_VALIDATORS = [
        {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        'OPTIONS': {
        'min_length': 9,
        }
        },
        {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
           # 密码认证相关
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATICFILES_DIRS = [os.path.join(BASE_DIR, 'common/static'), ]
           # 静态文件地址
    

    3.创建应用

    # 法一:
        # 进入项目中 manage.py 同级目录:
    python manage.py startapp blog
    
    # 应用名不允许与系统的模块名相同
    添加应用名到 settings.py 中的 INSTALLED_APPS 里面
    
    # 法二:
    # pycharm:
    工具 --> "Run manage.py Task" (option + R) --> python manage.py startapp blog
    

    3.1.应用目录

    migrations/
      # 数据迁移模块
    admin.py
      # 后台管理系统配置
    apps.py
      # 应用的配置
    models.py
      # 数据模块,使用ORM框架,类似MVC结构中的模型Models
    test.py
      # 自动化测试模块
      # Django 提供了自动化测试功能,在这里面编写测试脚本、语句
    vews.py
      # 执行相应的代码所在模块
      # 代码逻辑处理的主要文件
      # 项目中大部分代码都在这里编写
    

    4.测试——第一个示例

    4.1.创建响应

    < views.py >
    
    from django.shortcuts import render
    	# 引入请求响应包
    from django.http import HttpResponse
      # Create your views here.
      # Django 中每一个请求都由一个函数处理,参数默认约定 response
    def index(response):
      return HttpResponse('Hello World!')
    
    < urls.py >
      # 每个 URL 都以 url 的形式写出来
      # url 函数放在 urlpatterns 列表中
      # url 函数三个参数:URL,对应方法,名称
    
    # 法一:
    from django.contrib import admin
    from django.urls import path
    from blog import views # 新增
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.index), # 新增
    ]
    
    # 法二:
      # 在根 urls.py 中引入 include
      # 在 app 目录下创建 urls.py,格式与根 urls.py 格式相同
      # 根 urls.py 中 url 函数第2个参数改为 include('blog.urls')
      # 要注意两个 urls.py 中的 URL 参数,如果都有的话,访问需要两级 URLURL
    
    < urls.py >
    
    from django.contrib import admin
    from django.urls import path, include # 新增 include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', include('blog.urls')),
    ]
    
    < blog/urls.py >
    
    from django.urls import path, include
    from blog import views
    
    urlpatterns = [
        path('', views.index),
    ]
    

    4.2.启动

    python3 manage.py runserver
    

    5.Templates 目录说明

    • 就是 HTML 文件

    • 使用了 Django 模板语言(Django Template Language, DTL)

    • 可以使用第三方模板(如 Jinja2)

    • 模板引擎:修改 settings.py 中 TEMPLATES 参数中 BACKEND 参数

    • 创建 template

    • app 目录下创建 templates 目录

    • 在该目录下创建 html 文件

    • 在 views.py 中返回render()

    • DTL

      • render() 中支持 dict 参数
      • dict 参数是后台传递到模板的参数,key 为参数名
      • 模板中使用 {{ 参数名 }}

    5.1.templates HTML冲突问题

    • Django 按照 INSTALLED_APPS 中添加顺序查找 templates

      • 不同 app 下 templates 目录中的 同名.html 文件会造成冲突
    • 解决

      • 在 app 的 templates 目录下创建以 app 名为名称的目录
      • 将 html 文件放入新创建的目录下

    6.Models 目录说明

    • Django 中的 Models 是什么?

      • 通常,一个Model 对应数据库的一张表
      • Django 中 Models 以 class 的形式表现
      • 它包含了一些基本字段以及数据的一些行为
    • ORM

      • 对象关系映射(Object Relation Mapping)

      • 实现了对象和数据库之间的映射

      • 隐藏了数据访问的细节,不需要编写SQL语句

    • 编写 Models

      • 在应用根目录下创建 models.py,并引入 models 模块

      • 创建 class,继承 models.Model,该类就是一张数据表

      • 在 class 中创建字段

    • 字段创建

      • 字段即类里面的属性(变量)
    class Article(models.Model):
        title = models.CharField(max_length=32, default='title')
        content = models.TextField(null=True)
    
    • 生成数据表
      • 命令行进入 manage.py 同级目录
    python manage.py makemigrations <app>
    
    • 会生成一个py文件,并且创建 model
    blog/migrations/0001_initial.py
    - Create model Article
    python manage.py migrate <app>
    
    • 真正执行插入操作
    # Tracking file by folder pattern: migrations
    # Operations to perform:
    # Apply all migrations: blog
    # Running migrations:
    # Applying blog.0001_initial... OK
    
    • 查看 SQL语句
      • Django 会自动在 /migrations/ 目录下生产一直文件
     python manage.py sqlmigrate <app> <文件id>
    
    • 默认 sqlite3 数据库在项目根目录下的 db.sqlite3
     # BEGIN;
     # --
     # -- Create model Article
     # --
     # CREATE TABLE "blog_article" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(32) NOT NULL, "content" text NULL);
     # COMMIT;
    

    7.查看、编辑 db.sqlite3

    • 第三方轻量、免费软件 SQLite Expert Personal

    8.admin

    8.1.什么是 admin

    • admin 是 Django 自带的一个功能强大的自动化数据管理洁面
    • 被授权的用户可直接在 admin 中管理数据库
    • Django 提供了许多针对 admin 的定制功能

    8.2.配置admin

    • 创建用户
    python manage.py createsuperyuser
      Username: admin
      Email: 
      Password: 
      Password(again): # 密码8个字符以上
    
    • admin 入口
    localhost:8000/admin
    
    • 调整admin语言为中文
    < settings.py >
    LANGUAGE_CODE = 'zh-hans'
    
    • 配置应用

      • 在 app 下 admin.py 中引入 app 的 models 模块

      • 编辑 admin.py

        admin.site.register(models.Article)
        
  • 相关阅读:
    ssh.sh_for_ubuntu1604
    ssh.sh_for_ubuntu1404
    ssh.sh_for_ubuntu1204
    ssh.sh_for_centos
    raw,cow,qcow,qcow2镜像的比较
    Oz 创建Windows2008R2镜像
    Oz 创建Ubuntu镜像
    Oz 创建Debian8镜像
    Oz 创建CentOS7镜像
    Oz 创建CentOS6镜像
  • 原文地址:https://www.cnblogs.com/David-domain/p/11173372.html
Copyright © 2011-2022 走看看