Django介绍
- Django是一个开放源代码的Web应用框架,由Python写成。Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。
django官方网站
django中文文档网站
MVC框架核心思想
解耦,让不同的代码块之间降低耦合,增加代码的可扩展性和可移植性,实现向后兼容。
MVC各部分的功能
- M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
- V全拼为View,用于封装结果,生成页面展示的html内容。
- C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
MVT各部分的功能 - M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
- V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
- T全拼为Template(模板),与MVC中的V功能相同,负责封装构造要返回的html。
-差异就在于黑线黑箭头标识出来的部分
虚拟环境
- 不同项目,用到的包版本不同 兼容性和语法也不同
- 所以要在虚拟环境下运行项目,这个是重点
虚拟环境其实就是对真实pyhton环境的复制,这样我们在复制的python环境中安装包就不会影响到真实的python环境。通过建立多个虚拟环境,在不同的虚拟环境中开发项目就实现了项目之间的隔离。
创建虚拟环境
-
创建并配置使所有的虚拟环境,都位于/home/python/下的隐藏目录.virtualenvs下
1.安装虚拟环境sudo pip3 install virtualenv
2.安装虚拟环境扩展包sudo pip3 install virtualenvwrapper
3.修改用户家目录下的配置文件.bashrc,添加如下内容 vim.bashrcexport WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh生效文件 source .bashrc
4.创建python3虚拟环境的命令如下mkvirtualenv -p python3 虚拟环境名称
退出
- 退出虚拟环境的命令 deactivate
使用与查看
- 查看所有虚拟环境的命令 workon 两次tab键
- 使用虚拟环境的命令 workon 虚拟环境名称
删除虚拟环境
删除虚拟环境的命令 rmvirtualenv 虚拟环境名称安装包
进入虚拟环境后 是一个新的python环境 里面没有任何包 需要根据项目安装相应的包安装所需要的包 pip install 包名称
其中指定包的版本需要加两个等号+版本号 pip install django==1.8.2
查看已有的包 pip list
包的安装路径:/usr/local/lib/python3.5/dist-packages
项目创建
创建Django项目
django-admin startproject 项目名
创建应用必须先进入虚拟环境。
项目目录如下:
- manage.py是项目管理文件,通过它管理项目。
- 与项目同名的目录,此处为test1。
- _init _.py是一个空文件,作用是这个目录test1可以被当作包使用。
- settings.py是项目的配置文件。
- urls.py是项目的URL配置文件。
- wsgi.py: web服务器和Django交互的入口。
创建Django应用
- 一个项目由很多个应用组成的
- 每一个应用完成一个功能模块
创建应用的命令python manage.py startapp 应用名
注意:创建应用时需要先进入项目目录
应用目录如下:
- _init.py _:说明目录是一个Python模块。
- models.py: 写和数据库项目的内容, 设计模型类。
- views.py: ,接收请求,进行处理,与M和T进行交互,返回应答。
- admin.py文件跟网站的后台管理相关。
- migrations文件夹之后给大家介绍。
应用注册
- 建立应用和项目之间的联系,需要对应用进行注册。
- 修改settings.py中的 INSTALLED_APPS 配置项。
开发服务器
- django提供了一个纯python编写的轻量级web服务器
- 可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000。
python manage.py runserver ip:端口
服务器成功启动后如下图:
紧接着在浏览器中输入网址“127.0.0.1:8000”,或者按着ctrl键点击上图中标示出来的地址,可以查看当前站点开发效果。
如果增加、修改、删除文件,服务器会自动重启;
按ctrl+c停止服务器。
模型设计
- 在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。
- ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
- O是object: 类对象
- R是relation: 关系, 也就是关系数据库中数据表的意思
- M是mapping: 映射
使用django进行数据库开发的步骤
1.在models.py中定义模型类2.迁移
3.通过类和对象完成数据增删改查操作
1.模型类的设计
根据设计,在models.py中定义模型类如下
2.迁移
迁移由两步完成:
- 1.生成迁移文件:根据模型类生成创建表的迁移文件。
python manage.py makemigrations - 2.执行迁移:根据第一步生成的迁移文件在数据库中创建表。
python manage.py migrate
数据表的默认名称为: <app_name>_<model_name>
- hbook = models.ForeignKey(‘BookInfo’)这句代码就让BookInfo类和HeroInfo类之间建立了一对多的关系。
3.数据操作//增删改查
- 进入项目shell的命令:python manage.py shell
- 首先引入booktest/models中的类:from booktest.models import BookInfo,HeroInfo
- 查询所有图书信息:BookInfo.objects.all()
- 新建图书对象
b=BookInfo()
b.btitle=“射雕英雄传”
from datetime import date
b.bpub_date=date(1991,1,31)
b.save()
- 查找图书信息并查看值
b=BookInfo.objects.get(id=1)
b
b.id
b.btitle
b.bpub_date
- 修改图书信息
b.bpub_date=date(2017,1,1)
b.save()
b.bpub_date
- 删除图书信息
b.delete()
4.对象的关联操作
创建一个BookInfo对象
b=BookInfo()
b.btitle=‘abc’
b.bpub_date=date(2017,1,1)
b.save()
创建一个HeroInfo对象
h=HeroInfo()
h.hname=‘a1’
h.hgender=False
h.hcomment=‘he is a boy’
h.hbook=b
h.save()
图书与英雄是一对多的关系,django中提供了关联的操作方式。h.hbook=b
获得关联集合:返回当前book对象的所有hero。b.heroinfo_set.all()
后台管理
使用Django的管理模块,需要按照如下步骤操作:- 1.管理界面本地化
- 2.创建管理员
- 3.注册模型类
- 4.自定义管理页面
1.管理界面本地化
打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下:
LANGUAGE_CODE = ‘zh-hans’ #使用中国语言
TIME_ZONE = ‘Asia/Shanghai’ #使用中国上海时间
2.创建管理员
- 创建管理员的命令如下,按提示输入用户名、邮箱、密码。 python manage.py createsuperuser
- 启动服务器。python manage.py runserver
- 进入。http://127.0.0.1:8000/admin/
- 登录成功后界面如下,但是并没有图书、英雄的管理入口,接下来进行第三步操作。
3.注册模型类
- 登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。
打开booktest/admin.py文件,编写如下代码:from django.contrib import admin from booktest.models import BookInfo,HeroInfo admin.site.register(BookInfo) admin.site.register(HeroInfo)
4.自定义管理页面
在列表页只显示出了BookInfo object,对象的其它属性并没有列出来,查看非常不方便。 Django提供了自定义管理页面的功能,比如列表页要显示哪些值。
打开booktest/admin.py文件,自定义类,继承自admin.ModelAdmin类。
- 属性list_display表示要显示哪些属性
class BookInfoAdmin(admin.ModelAdmin):
list_display = [‘id’, ‘btitle’, ‘bpub_date’]
- 修改模型类BookInfo的注册代码如下
admin.site.register(BookInfo, BookInfoAdmin)
- 刷新BookInfo的列表页,所有属性都显示出来了
- 最终booktest/admin.py文件代码如下
视图
在Django中,通过浏览器去请求一个页面时,使用**视图函数**来处理这个请求的,视图函数处理之后,要给浏览器返回页面内容。**使用视图的步骤:**
- 1.定义视图
- 2.配置URLconf
1.定义视图
-
视图函数必须有一个参数request,进行处理之后,需要返回一个HttpResponse的类对象,hello python就是返回给浏览器显示的内容。
-
打开booktest/views.py文件,定义视图index如下
from django.http import HttpResponse def index(request): return HttpResponse("index")
2.进行url配置
-
url配置的目的是让建立url和视图函数的对应关系。url配置项定义在urlpatterns的列表中,每一个配置项都调用url函数。
-
url函数有两个参数,第一个参数是一个正则表达式,第二个是对应的处理动作。
-
配置url时,有两种语法格式:
- url(正则表达式,视图函数名)
- url(正则表达式,include(应用中的urls文件))
-
需要两步完成URLconf配置
1.在应用中定义URLconf
2.包含到项目的URLconf中
在应用中定义URLconf
- 在booktest应用下创建urls.py文件,定义代码如下:
from django.conf.urls import url from booktest import views urlpatterns = [ url(r'^$', views.index), # $表示匹配到完整的结尾 ] ```
包含到项目的URLconf中
- 包含到项目中:打开test1/urls.py文件,为urlpatterns列表增加项如下:
url(r'^', include('booktest.urls')),
- url匹配的过程
当用户输入如http://127.0.0.1:8000/aindex时,去除域名和最前面的/,剩下aindex,拿aindex字符串到项目的urls文件中进行匹配,配置成功之后,去除匹配的a字符,那剩下的index字符串继续到应用的urls文件中进行正则匹配,匹配成功之后执行视图函数index,index视图函数返回内容hello python给浏览器来显示。
模板
- 在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用,各种漂亮、炫酷的效果就出现了。
- 模板不仅仅是一个html文件。
创建模板文件
在booktest文件夹下创建templates,在该文件夹下创建booktest,在此文件夹创建index.html
配置模板目录
- 设置查找模板的路径:打开test1/settings.py文件,设置TEMPLATES的DIRS值。
'DIRS': [os.path.join(BASE_DIR, 'templates')],
使用模板文件
- a) 加载模板文件:去模板目录下面获取html文件的内容,得到一个模板对象。
- b) 定义模板上下文:向模板文件传递数据。
- c) 模板渲染:得到一个标准的html内容。
给模板文件传递数据
- 模板变量使用:{{模板变量名}}
- 模板代码段:{%代码段%}
- for循环:
{% for i in list %}
list不为空时执行的逻辑
{% endfor %}
结束标志
视图调用模板
- 打开booktst/views.py文件,调用上面定义的模板文件