Django框架基本使用
Django框架简单介绍
-
框架
一个框架就好比一个公司,每一个部门都有特定的职能,部门与部门相互配合才能让公司运转起来,而框架则是模块与模块相互配合来完成工作的
Django框架
-
它遵循的是 MVT 的思想
M: Model,模型,和数据库进行交互。
V: View,视图,接收请求,进行处理,与M和T进行交互,返回应答。
T: Template,模板,产生 html 页面。
虚拟环境的搭建
1.安装
-
这个鬼虚拟环境弄得我要疯,可能是我的 ubuntu 系统有点问题,本来很简单的pip装就可以了,然后弄了半天,这里分享一个虚拟环境搭建的网站
2.使用
# 创建虚拟环境命令:
mkvirtualenv 虚拟环境名
# 创建python3虚拟环境:
mkvirtualenv -p python3 名字
# 进入虚拟环境工作:
workon 虚拟环境名
# 查看机器上有多少个虚拟环境:
workon 空格 + 两个tab键
# 退出虚拟环境:
deactivate
# 删除虚拟环境:
rmvirtualenv 虚拟环境名
# 虚拟环境下安装包的命令:
pip install 包名
# 查看虚拟环境中安装了哪些python包:
pip list
pip freeze
# 安装django环境:
pip install django==1.8.2
项目
1.创建Django项目
-
在虚拟环境下
django-admin startproject 项目名
可以先创建一个目录,在该目录下创建项目test1
manage.py
是项目管理文件,通过它管理项目。 与项目同名的目录,此处为 test1。__init__
是一个空文件,作用是这个目录test1可以被当作包使用。settings.py
是项目的整体配置文件。urls.py
是项目的 URL 配置文件。wsgi.py
是项目与 WSGI 兼容的Web服务器入口
2.创建应用
-
一个项目由很多个应用组成的,每一个应用完成一个功能模块。这里示例一下图书—人物的管理维护
python manage.py startapp booktest # 创建应用 在项目目录下创建
__init__.py
是一个空文件,表示当前目录 booktest 可以当作一个python包使用。tests.py
文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做。models.py
文件跟数据库操作相关。views.py
文件跟接收浏览器请求,进行处理,返回页面相关。admin.py
文件跟网站的后台管理相关。
3.应用注册
-
应用创建成功后,需要注册才可以使用,也就是建立应用和项目之间的关联,在
test1/settings.py
中INSTALLED_APPS
下添加应用的名称就可以完成安装。 -
这时就可以用 Pycharm 之类的编辑软件打开项目,来编辑里面的内容
这样就可以了~~~
4.启动项目
-
Django 为了能预览开发中的效果,它提供了一个轻量级的 web服务器,以下命令启动
python manage.py runserver ip:端口 python manage.py runserver # 默认是127.0.0.1 端口:8000
然后就可用浏览器访问了
开发
链接MySQL数据库
-
Django数据库默认使用的是 sqlite3 数据库,若要更换数据库,需手动去更改下settings.py的配置
-
开发数据库流程:
- 1.在models.py中定义模型类
- 2.迁移
- 3.通过类和对象完成数据增删改查操作
模型类
- Django里面可以通过 类 和 对象 对数据表进行操作
1.定义类
-
在 models.py 文件中,继承
models.Model
from django.db import models # 设计和表对应的类,模型类 # 图书类 class BookInfo(models.Model): '''图书模型类''' # 图书的名称,CharField说明是一个字符串,max_length指定字符串的最大长度 btitle = models.CharField(max_length=20) # 出版日期,DateFields说明是一个日期类型 bpud_data = models.DateField() # 这句话是因为后面查询时说 objects 找不到,有的就不会有这问题,可以先不写 objects = models.Manager() class HeroInfo(models.Model): """英雄人物模型类""" # 英雄名称 hname = models.CharField(max_length=20) # 性别,布尔类型,默认男 hgender = models.BooleanField(default=False) # 备注 hcommnet = models.CharField(max_length=128) # 关系属性 hbook 建立图书类和英雄人物类之间的一对多关系 hbook = models.ForeignKey('BookInfo')
2.迁移
-
生成迁移文件
python manage.py makemigrations
这玩意是根据上面的类生成的
-
执行迁移生成表
python manage.py migrate
- 这句就是在数据库中生成对应的表,表名的格式:
应用名_模型类名小写
- 这句就是在数据库中生成对应的表,表名的格式:
要注意的是,新定义了模型类,都要重新 迁移 ,因为定义模型类,意味着数据库中的表要发生改变,所以得重新迁移
对数据库操作
-
可以进入项目的 shell 里面测试相关的操作
python manage.py shell
-
一些简单的操作
# 首先导入模型类: from booktest.models import BookInfo,HeroInfo # 向booktest_bookinfo表中插入一条数据。 b = BookInfo() #定义一个BookInfo类的对象 b.btitle ='天龙八部' #定义b对象的属性并赋值 b.bpub_date = date(1990,10,11) b.save() #才会将数据保存进数据库 # 查询出booktest_bookinfo表中id为1的数据。 b = BookInfo.objects.get(id=1) # 在上一步的基础上改变b对应图书的出版日期。 b.bpub_date = date(1989,10,21) b.save() #才会更新表格中的数据 # 紧接上一步,删除b对应的图书的数据。 b.delete() # 向booktest_heroInfo表中插入一条数据。 h = HeroInfo() h.hname = '郭靖' h.hgender = False h.hcomment = ‘降龙十八掌’ b2 = BookInfo.objects.get(id=2) h.hbook = b2 # 给关系属性赋值,英雄对象所属的图书对象 h.save() # 查询图书表里面的所有内容。 BookInfo.objects.all() HeroInfo.objects.all() # 查询出id为2的图书中所有英雄人物的信息。 b = BookInfo.objects.get(id=2) b.heroinfo_set.all() # 查询出b图书中所有英雄人物的信息
视图
- 服务器在收到这个请求之后,就一定对应着一个处理动作,这个处理动作就是帮我们产生页面内容并返回回来,这个过程是由 视图 来做的。
- 对于 django 的设计框架 MVT ,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者。
- 视图的使用步骤:
- 1.定义视图函数
- 2.配置URLconf
1.定义视图
-
视图说道底就是一个就是一个Python函数,在
views.py
中定义from django.http import HttpResponse def index(request): # 这你是处理的语句 return HttpResponse("hello python") # 处理完后把你想要返回的数据返回
视图函数必须有一个参数request,进行处理之后,需要返回一个 HttpResponse 的类对象,**hello python ** 就是返回给浏览器显示的内容。
2.配置URL
- 首先可以先把项目中(即
/test1
目录下)的urls.py
进行配置
这里配置只是正则并没有写具体,而是包含具体应用的
urls.py
文件,在应用的urls.py
文件中写 url 和 视图函数 的对应关系。
- 然后创建应用(即在
/test1/booktest
目录下)的urls.py
,在进行配置
这里就建立了与 views 联系,然后可以输入127.0.0.1:8000/index去访问看看啦
-
说一下匹配过程
请求者在浏览器地址栏中输入 url,请求到网站后,获取 url 信息,然后先在项目中的
urls.py
进行逐条匹配,再去 应用中的urls.py
进行匹配,只要途中匹配成功,则调用对应的视图函数,若都没有匹配成功,则返回404错误
模板
- 要返回一个漂亮的页面,就需要用到前端写的数据,在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用
1.创建模板
-
首先创建存放模板的文件夹
-
然后就可以在里面创建模板文件
2.配置模板目录
-
同样在
settings.py
文件下进行配置
3.定义模板
-
在 html 文件下去写要显示的内容
-
代码和数据变量
-
在模板中也可以使用变量,变量可能是从视图中传递过来的,也可能是在模板中定义的
- 页面格式好像不支持,就截图吧~~
-
代码段,在模板文件中也可以使用代码,如一个for循环
-
4.视图调用模板
- 分为三步:
- 1.找到模板
- 2.定义上下文
- 3.渲染模板
-
在
views.py
文件下from django.http import HttpResponse from django.template import loader, RequestContext def index(request): """进行处理,和M和T进行交互""" # 使用模板文件 # >> < 1 >加载模板文件 temp = loader.get_template('booktest/index.html') # >> < 2 >定义上下文:给模板文件传递数据 context = RequestContext(request,{}) # >> < 3 >模板渲染:产生标准的HTML内容 res_html = temp.render(context) # >> < 4 >返回给浏览器 return HttpResponse(res_html)
-
Django 把上面的代码进行了封装在了一个
render
模块中from django.shortcuts import render def index(request): # return my_render(request, 'booktest/index.html') return render(request, 'booktest/index.html', {'content': '我最帅!', 'list': list(range(0, 10))})
- 它有三个参数:
- 第一个参数为 request 对象
- 第二个参数为模板文件路径
- 第三个参数为字典,表示向模板中传递的上下文数据
- 它有三个参数:
-
后台管理
- 在上面配置项目
urls.py
时,是不是好奇怎么有个匹配admin
的,这个就是Django 提供的一个后台管理页面
1.本地化
-
语言和时区的本地化
-
修改
settings.py
文件
2.创建管理员
python manage.py createsuperuser
- 跟着提示输就行了,然后
3.注册模型类
-
在应用下的
admin.py
中注册模型类 -
在类模型下添加这个,这是返回给页面的
4.自定义管理页面
- 就是自定义显示的东东是啥,在上图中有,想显示什么字段之类的
这绝对是我写得最长的一篇了。。。
END…..