• 相关概念
    • 软件框架
      • 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来。
      • 一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模块与模块之间通过相互配合来完成软件的开发
      • 软件框架是针对某一类软件设计问题而产生的
    • MVC 框架
      • MVC最初是由施乐公司旗下的帕罗奥多研究中心中的一位研究人员给 smalltalk语言发明的一种软件设计模式。
      • MVC的产生理念: 分工
        • 让专门的人去做专门的事。
      • MVC的核心思想: 解耦。
      • MVC的思想被应用在的web开发的方面,产生了web MVC框架。
    • Web MVC 框架模块功能
      • 示意图:通过浏览器注册用户信息
      • M:Model 模型,和数据库进行交互
      • V:View 视图,产生 html 页面
      • C:Controller,控制器,接收请求,进行处理,与 M 和 V 进行交互,返回应答
  • Django 框架简介
    • 简介
      • Django是劳伦斯出版集团的开发人员为开发新闻内容网站而设计出来的一个软件
      • 它遵循MVC思想,但是有自己的一个名词,叫做MVT
      • Django遵循快速开发和DRY原则
        • Do not repeat yourself.不要自己去重复一些工作
      • 在线文档
    • MVT 各部分功能
      • 示意图
      • M:Model, 模型, 和 MVC 中 M 功能相同,和数据库进行交互。
      • V:View,视图, 和 MVC 中 C 功能相同,接收请求,进行处理,与 M 和 T 进行交互,返回应答
      • T:Template, 模板, 和 MVC 中 V 功能相同,产生 html 页面
  • 虚拟环境
    • 概念
      • 在同一个 python 环境中安装同一个包的不同版本,后安装的包会把原来安装的包覆盖掉
        • 如果同一台机器上两个项目依赖于相同包的不同版本,则会导致一些项目运行失败
      • 解决的方案就是:虚拟环境。
      • 虚拟环境是真实 python 环境的复制版本
      • 在虚拟环境中使用的 python 是复制的 python,安装 python 包也是安装在复制的 python 中
    • 安装和配置
      • 安装

sudo pip install virtualenv #安装虚拟环境

sudo pip install virtualenvwrapper #安装虚拟环境扩展包

  • 编辑家目录下的 .bashrc 文件,添加下面三行

VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.5# python 文件位置,要指明版本,不然会和 conda 的包混淆

export WORKON_HOME=$HOME/.virtualenvs# 虚拟文件的位置

source /usr/local/bin/virtualenvwrapper.sh

  • 使得 .bashrc 文件生效

source .bashrc

  • 使用
    • 虚拟环境创建与删除

# 创建虚拟环境命令:

mkvirtualenv 虚拟环境名

# 创建指定 python 版本的虚拟环境:

mkvirtualenv -p python3.5 bj11_py3

# 进入虚拟环境工作

workon 虚拟环境名

# 查看机器上有多少个虚拟环境:

workon 空格 + 两个tab键

# 退出虚拟环境

deactivate

# 删除虚拟环境:

rmvirtualenv 虚拟环境名

  • 软件包的安装

# 虚拟环境下安装包的命令:

pip install 包名

# 注意:不能使用sudo pip install 包名,这个命令会把包安装到真实的主机环境上而不是安装到虚拟环境中。

# 查看虚拟环境中安装了哪些python包:

pip list

pip freeze

# 安装特定版本的 django 环境:

pip install django==1.8.2

  • Django 项目创建与基本使用
    • 创建项目
      • 命令

django-admin startproject 项目名

  • 创建应用时,必须先进入相应的虚拟环境
  • 项目目录
    • 示意图
    • 相关文件的功用
      • __init__.py: 说明 test_django 是一个python包。
      • settings.py: 项目的配置文件
      • urls.py: 进行 url 路由的配置
      • wsgi.py: web 服务器和 Django 交互的入口
      • manage.py: 项目的管理文件
  • 创建应用
    • 在 Django 中,一个功能模块使用一个应用来实现
    • 创建应用的命令

python manage.py startapp 应用名

  • 应用目录
    • 相关文件的功用
      • __init__.py: 说明目录是一个Python模块。
      • models.py: 写和数据库项目的内容, 设计模型类。
      • views.py: 接收请求,进行处理,与M和T进行交互,返回应答。
        • 定义处理函数,视图函数
      • tests.py: 写测试代码的文件
      • admin.py: 网站后台管理相关的文件
  • 应用注册
    • 建立应用和项目之间的联系,需要对建立的应用进行注册
    • 修改 settings.py 中的 INSTALLED_APPS 配置项
  • 启动项目
    • 运行开发web服务器命令:

python manage.py runserver

  • 模型类(M Models)
    • ORM,对象关系映射
      • 示意图
      • django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来
      • 只需要通过类和对象就可以对数据表进行操
      • 在Django中主要是设计模型类来实现 ORM
      • ORM另外一个作用:根据设计的类生成数据库中的表
    • 模型类设计
      • 在应用 model.py 中设计模型类
      • 必须继承于 models.Model 类
      • Models.ForeignKey可以建立两个模型类之间一对多的关系
        • django在生成表的时候,就会在多端的表中创建一列作为外键,建立两个表之间一对多的关系
      • 示例的 model.py 文件

from django.db import models

# 设计和表对应的类,即为模型类

# Create your models here.

# 一类

# 图书类

class BookInfo(models.Model):

"""图书类模型"""

# CharField 说明是一个字符串,max_length 指定最大字符串长度

btitle = models.CharField(max_length=20)

# DataField 说明是一个日期类型

bpub_date = models.DateField()

def __str__(self):

"""返回图书类的标题"""

return self.btitle

# 多类

# 英雄人物类

# 英雄名 hname

# 性别 hgender

# 年龄 hage

# 备注 hcomment

# 关系属性,建立图书类和英雄类之间的关系

class HeroInfo(models.Model):

"""英雄人物类属性"""

hname = models.CharField(max_length=20)

# BooleanFileld 说明是布尔类,default 指定默认值,False表示男

hgender = models.BooleanField(default=False)

hcomment = models.CharField(max_length=128)

# 关系属性,hbook 建立图书类和英雄类之间的关系

# 关系属性对应的表的字段名格式:关系属性名_id

hbook = models.ForeignKey('BookInfo')

def __str__(self):

"""返回英雄名"""

return self.hname

  • 模型类生成表
    • 生成迁移表
      • 命令

python manage.py makemigrations

  • 示意图
  • 迁移文件是根据模型类生成的
  • 执行迁移生成表
    • 命令

python mange.py migrate

  • 根据迁移文件生成表
  • 生成表名的默认格式:
    • 应用名_模型类名小写
  • 通过模型类来操作数据表
    • 进入项目 shell 的命令

python manage.py shell

  • 以下例子需要在项目 shell 终端中运行

# 首先导入模型类:

from booktest.models import BookInfo,HeroInfo

# 1)向booktest_bookinfo表中插入一条数据。

b = BookInfo() #定义一个BookInfo类的对象

b.btitle ='天龙八部' #定义b对象的属性并赋值

b.bpub_date = date(1990,10,11)

b.save() #才会将数据保存进数据库

的数据。

b = BookInfo.objects.get(id=1)

# 3) 在上一步的基础上改变b对应图书的出版日期。

b.bpub_date = date(1989,10,21)

b.save() #才会更新表格中的数据

# 4) 紧接上一步,删除b对应的图书的数据。

b.delete() #才会删除

# 5) 向booktest_heroInfo表中插入一条数据。

h = HeroInfo()

h.hname = '郭靖'

h.hgender = False

h.hcomment = '降龙十八掌'

b2 = BookInfo.objects.get(id=2)

h.hbook = b2#给关系属性赋值,英雄对象所属的图书对象

h.save()

# 6) 查询图书表里面的所有内容。

BookInfo.objects.all()

HeroInfo.objects.all()

  • 关联操作
    • 示意图
    • 相关命令

的图书中所有英雄人物的信息。

b = BookInfo.objects.get(id=2)

#查询出b图书中所有英雄人物的信息

b.heroinfo_set.all()

  • 后台管理
    • 本地化
      • 语言和时区的本地化
      • 修改 settings.py 文件
    • 创建管理员
      • 命令

python manage.py createsuperuser

  • 注册模型类
    • 在应用下的 admin.py 中注册模型类
      • 让 django 框架根据注册的模型类来生成对应的管理界面
  • 自定义管理界面
    • 自定义模型管理类
      • 确定 django 在生成的管理界面上显示哪些内容
  • 注册模型类与自定义管理界面的实例
    • admin.py

from django.contrib import admin

from booktest.models import BookInfo, HeroInfo

# 后台管理的相关文件

# Register your models here.

class BookInfoAdmin(admin.ModelAdmin):

"""自定义模型管理类, 图书模型管理类"""

list_display = ['id', 'btitle', 'bpub_date']

class HeroInfoAdmin(admin.ModelAdmin):

"""自定义模型管理类, 英雄模型管理类"""

list_display = ['id', 'hname', 'hgender', 'hcomment', 'hbook_id']

# 注册模型类

admin.site.register(BookInfo, BookInfoAdmin)

admin.site.register(HeroInfo, HeroInfoAdmin)

  • 视图
    • 在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的,视图函数处理之后,要给浏览器返回页面内容
    • 定义视图函数
      • 视图函数定义在views.py中
      • 视图函数必须有一个参数request,进行处理之后,需要返回一个HttpResponse的类对象
    • 实例

from django.shortcuts import render

from django.http import HttpResponse

from django.template import loader, RequestContext

from booktest.models import BookInfo, HeroInfo

# Create your views here.

def my_render(request, template_path, context_dict={}):

"""加载模板文件"""

# 使用模板文件

# 1. 加载模板文件, 获得模板对象

temp = loader.get_template(template_path)

# 2. 定义模板上下文:给模板文件传递数据

context = RequestContext(request, context_dict)

# 3. 模板渲染

res_html = temp.render(context)

# 4. 返回给浏览器

return HttpResponse(res_html)

# 1. 定义视图函数,HTTPRequest

# 2. 进行 url 配置,建立 url 地址和视图的对应关系

# http://127.0.0.1:8000/index

def index(request):

# 进行处理,和 M 与 T 进行交互

# return HttpResponse("程序正常运行,哈哈哈")

return my_render(request, "booktest/index.html")

  • 进行 url 配置
    • 配置流程图
    • url 配置的目的是让建立 url 和视图函数的对应关系
    • url 配置项定义在 urlpatterns 的列表中,每一个配置项都调用 url 函数。
    • url 函数有两个参数,第一个参数是一个正则表达式,第二个是对应的处理动作。
    • 配置url时,有两种语法格式:
      • url(正则表达式,视图函数名)
      • url(正则表达式,include(应用中的urls文件))
    • 工作中在配置 url 时,首先在项目的 urls.py 文件中添加配置项时,并不写具体的 url 和视图函数之间的对应关系
    • 而是通过 include 将其指向具体应用的 urls.py 文件
      • 在应用的 urls.py 文件中写 url 和视图函数的对应关系。
  • url 匹配过程
    • 在项目的urls.py文件中包含具体应用的urls.py文件,应用的urls.py文件中写url和视图函数的对应关系
    • 示意图
    • ·过程
      • 当用户输入如 http://127.0.0.1:8000/aindex时,去除域名和最前面的 /,剩下 aindex
      • 拿aindex字符串到项目的urls文件中进行匹配,配置成功之后,去除匹配的a字符
      • 剩下的index字符串继续到应用的urls文件中进行正则匹配,匹配成功之后执行视图函数index
      • index视图函数返回内容 hello python 给浏览器来显示
  • 模板
    • 模板不仅仅是一个 html 文件
    • 模板文件的使用
      • 创建模板文件夹
      • 配置模板目录 settings.py
      • 模板文件的处理过程
        • 加载模板文件
          • 去模板目录下面获取html文件的内容,得到一个模板对象。
        • 定义模板上下文
          • 向模板文件传递数据。
        • 模板渲染
          • 得到一个标准的html内容
        • 实例
    • 给模板文件传递数据
      • 模板变量的使用
        • {{ 模板变量名 }}
      • 模板代码段
        • {%代码段%}
      • for 循环

{% for i in list %}

    list不为空时执行的逻辑

{% empty %}

    list为空时执行的逻辑

{% endfor %}

  • views 通过字典传送数据
    • 实例

def show_books(request):

"""显示图书信息"""

# 1. 通过 M 查找图书表中的数据

books = BookInfo.objects.all()

# 2. 使用模板

return render(request, "booktest/show_book.html", {'books': books})

  • 案例
    • 编码之前的准备工作:
      • 设计出访问页面的 url 和对应的视图函数的名字,确定视图函数的功能。
      • 设计模板文件的名字
    • 以下为案例中的简单设计过程:
      • 完成图书信息的展示:
        • 设计url,通过浏览器访问 http://127.0.0.1:8000/books 时显示图书信息页面。
        • 设计url对应的视图函数show_books。
        • 查询出所有图书的信息,将这些信息传递给模板文件。
        • 编写模板文件show_books.html。
        • 遍历显示出每一本图书的信息
      • 完成点击某本图书时,显示出图书里所有英雄信息的页面
        • 设计url,通过访问 http://127.0.0.1:8000/books/数字 时显示对应的英雄信息页面
        • 这里数字指点击的图书的id
        • 设计对应的视图函数detail
          • 接收图书的id,根据id查询出相应的图书信息,然后查询出图书中的所有英雄信息
          • id 信息可以通过正则表达式的分组匹配获取
            • 示例 urls.py

from django.conf.urls import url

from booktest import views

# 在应用的 urls 文件中进行 url 配置的时候:

# 1. 需要严格的匹配开关和结尾

# 2. 从上到下匹配,一旦匹配成功,就会在 url 地址中去掉匹配项

urlpatterns = [

# 通过 url 函数设置 url 路由配置项

url(r"^index/?$", views.index),# 建立/index 和视图 index 之间的关系

url(r"^index2/?$", views.index2),# 建立/index 和视图 index 之间的关系

url(r"^books/?$", views.show_books),# 显示图书信息

url(r"^books/(\d+)$", views.detail)# 使用正则表达式的分组传入

]

  • 编写模板文件detail.html

01 Django基础知识的更多相关文章

  1. 01: Django基础篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  2. Spring笔记01(基础知识)

    1.基础知识 01.Spring:轻量级Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建. 02.目标:实现一个全方位的整合框架,实现“一站式”的企业应用开发 ...

  3. 【java基础】01 计算机基础知识

    一.计算机基础知识 1. 计算机 1. 什么是计算机? 计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设 ...

  4. django基础知识

    一.django的安装 1. pip3 install django 2. 把安装路径加到环境变量里以便以后启动admin相关命令,在windows系统中---我的电脑---属性----高级系统设置- ...

  5. Django 基础知识

    Django Models django 本身提供了非常强大易使用的ORM组件,并且支持多种数据库,如sqllite,mysql,progressSql,Oracle等,当然最常用的搭配还是mysql ...

  6. django 基础知识回顾

    内容回顾: 1. ajax参数 url: type: data: 1.value不能是字典 {k1:'v1',k2:[1,2,3,],k3; JSON.string} 2.$('').serilize ...

  7. django基础知识之Response对象

    HttpResponse对象 在django.http模块中定义了HttpResponse对象的API HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建 不调 ...

  8. Django基础知识MTV

    Django简介 Django是使用Python编写的一个开源Web框架.可以用它来快速搭建一个高性能的网站. Django也是一个MVC框架.但是在Django中,控制器接受用户输入的部分由框架自行 ...

  9. Django02 Django基础知识

    一.内容回顾 1.web应用程序 2.HTTP协议 a.http协议特性 b.http请求格式 c.http响应格式 3.wsgiref模块 4.Django下载与简单应用 a.Django简介(MT ...

随机推荐

  1. [NWPU2016][寒假作业][正常版第三组]R&&HDU1240

    题意是有个三维的地图,从起点到终点的最短路径.用bfs做,不过这个题坑的地方在于,开三维数组你要搞清楚纬度的关系.a[i][j][h] i是层,j是行,h是列.然后坐标呢,又是列,行,层,所以如果要用 ...

  2. 前端CSS(2)

    前段基础css(2)   一.标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web网页的制作,是个“流”,从上而下,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画. 标 ...

  3. CSS——三种页面引入方法

    目的:为了把样式和内容分开,并且使网页元素更加丰富,引入了CSS CSS页面引入有三种方式: 1)内联式:比较不常用,因为内容和样式仍然在一起,不方便.示例: <!DOCTYPE html> ...

  4. @Slf4j注解的使用

    项目中使用Slf4j日志: private static final Logger log=LoggerFactory.getLogger(TestMain.class); 使用@Slf4j以后,默认 ...

  5. iOS使用TestFlight进行内部和外部人员测试

    前言 在iOS 8中,苹果发布了一个叫做TestFlight的新玩意,用于将Beta测试流水化.此前你可能听说过这个东西,因为TestFlight作为一个独立的测试平台已经有些年头了.被苹果收购之后用 ...

  6. Arduino ESP8266编程深入要点

    Arduino for ESP8266的话,如果不修改代码,默认没有办法进入轻睡眠的省电模式,只能进入Modem Sleep,也就是说Wifi可以暂时睡眠但是CPU没法睡,Modem Sleep最低功 ...

  7. 像音乐播放App一样移动背景

    如果你经常听歌,你会发现歌曲app的背景会随着音乐移动的,从左到右或者从上到下,这种动画虽然简单,但是这里有一个技巧.如果你还不明白这种动效看看下面的demo (更多详细请参考:https://git ...

  8. Chrome Java插件过期

    企业应用软件中,基本都是基于某个版本的JDK进行开发的,更新跟不上Oracle更新的步伐,Chrome浏览器自动默认关闭了过期插件导致用Chrome无法打开应用软件. 解决办法如下:

  9. MySQL查询示例

    use test; create table t1(tid smallint(5) unsigned auto_increment,tname varchar(50),tkecheng varchar ...

  10. 【Python图像特征的音乐序列生成】关于小样本的一些思考

    我之前就注意到,深度学习和音乐结合,尤其是从乐理出发进行结合(而不是纯粹的进行音乐生成),是一个尚未被深度挖掘的全新领域.可想而知,这个方向符合我要求的数据肯定是要自己搜集了. 自己搜集的数据,在量上 ...