[原创]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 参数,如果都有的话,访问需要两级 URL\URL\
< 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)
      
posted @ 2019-07-11 23:02  指弹小能手  阅读(380)  评论(0编辑  收藏  举报

关于作者:专注数据库、Python 开发、ROS、深度学习,请多多赐教!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(iamkuboy@163.com)咨询.