www.lynda.com作为全球一流的在线培训网站,一直以高质量的视频课程著称。其课程内容也是紧跟行业潮流,本人最近学了里面的一门课程Learning Python and Django, 分享一下。
课程链接:https://www.lynda.com/Django-tutorials/Up-Running-Python-Django/386287-2.html
获取lynda.com永久会员的链接:https://item.taobao.com/item.htm?id=557746408785
前言:
什么是Django?
Django是一个开放源代码的Web应用框架,由Python写成。web框架是一系列的用于开发网页或网页应用的工具集合。Django里面的工具包括:
1. 对象关系映射 Object-relational mapping
2. url路由 url rooting
3. html模板 html templating
4. 表单处理 form handling
5. 测试 testing
建立一个Django项目
1.1 安装python
可以前往www.python.org, 建议安装python 3.6 最新版,python2.7很快就会淘汰.1.2 安装pip
下载get-pip.py地址:https://bootstrap.pypa.io/get-pip.py
打开终端, 输入:python get-pip.py 或者 sudo python get-pip.py
安装完成后输入: pip –version 查看验证1.3 安装Django
终端输入:pip install django 或者sudo pip install django
检查安装版本: django-admin –verison1.4 创建一个Django项目
创建Django命令: django-admin startproject firstdjango
此命令会创建一个以firstdjango为名字的文件夹,里面包含manage.py 和firstdjango文件夹;
@1 manage.py: 主要负责运行跟项目相关的命令
获取manage.py命令列表:python manage.py
启动server: python manage.py runserver
前往浏览器,输入地址:localhost:8000 能看到消息说明创建成功
@2 firstdjango文件夹:
init.py :主要用于告诉Django项目文件的位置
settings.py :主要用于配置Django
manage.py : 主要负责运行跟项目相关的命令
urls.py : 根据http请求,并查找分配路径
wsgi.py :被服务器调用,用以运行Django项目1.5 创建一个Django应用程序
应用程序是一系列的python文件集合,应用程序作为Django的一个组件。一个Django程序可能包含多个不同角色的app程序
一个应用程序通常包含以下以及文件或者文件夹:- models.py 数据层 数据结构和如何查询数据
- admin.py 接口管理 查看和更新数据
- views.py 控制层 –> http request –>> http response
- tests.py app测试
migrations/ 保存迁移文件 数据库随时间如何创建和更改
创建app命令:python manage.py startapp firstapp
当添加一个app到django项目中时,需要编辑settings.py; 在INSTALLED_APPS后面添加”firstapp”;
这样就算创建了一个Django项目了。1.6 设置django setting
Django Setting–python module variables
setting reference
1.INSTALLED_APPS 当添加一个app的时候需要设置
2.TEMPLATES 当第一次添加模板的时候需要设置- STATICFILES_DIRS 第一次添加静态资源的时候
其他设置: - DEBUG 默认是True, 设置为false
- DATABASES 默认SQLite, 需要使用MYSQL的时候,需要设置账号参数等
- 其他小的设置 参照文档
- STATICFILES_DIRS 第一次添加静态资源的时候
Django Models和admin
2.1 定义Django模型
1. model定义数据结构,以及在数据库如何存储,并通过ORM查询数据库
2. 一个Django App包含一个models.py文件,一个models.py多个model模型
3. model是继承了dhango.db.models的一个类
4. 每个model就是一张表,field相当于每张表里面的列,record相当于表里面的行row
2.2 定义数据表的列field
1. CharField(length=100) 包含最多100个字符的字符集合
2. TextField() 长度无限制的字符集
3. EmailField() 储存email
4. UrlField() 储存Url
5. FileField() 存储文件
6. ImageField() 存储图片,本质上也是一个FileField,但是验证是否为图片
7. BooleanFeild 布尔数据
8. DateTimeField 存储日期
Field可以有不同的属性,比如:
model.CharField(max_length=10, null=True, blank=True)
–max_length: 最大长度
–null: True 没有数据
–blank:True 表示允许该字符为空
–default: 设置默认值
–choices: 设置选项,只能从选项中选取
更多关于Field的文档链接: https://docs.djangoproject.com/en/1.11/ref/models/fields/2.3 创建和运行migrations:
Models:定义数据表结构
migrations: 通过代码更改操作数据结构
1. 初始化migrations:
更改数据库,包括添加model数据表,添加列Field, 删除列,更改列,都需要通过migrations实现
操作命令:
python manage.py makemigrations
python manage.py migrate –list
python manage.py migrate
然后可以用sqlitebrowser,打开db.sqlite3,查看创建的数据库2.4 Django Admin管理员登录
Django Admin实现登录,然后可以对数据表进行增删改查;
1. admin.py 里面添加代码:
from .models import item
admin.site.register(Item)
2. 终端添加超级管理员权限
python manage.py createsuperuser
输入系统密码:
输入邮箱:
输入密码:
创建成功
3. 运行服务器
python manage.py runserver4. 更改显示的内容 因为默认显示"item object", 可以前往admin更改显示的内容,代码如下: from django.contrib import admin from .models import Item class ItemAdmin(admin.ModelAdmin): list_display = ['title', 'amount', 'description'] admin.site.register(Item, ItemAdmin)
2.5 使用对象映射模型(ORM)操作数据表
命令:python manage.py shell 进入启动了Django的交互界面
1. 查询所有对象
In [1]: from inventory.models import ItemIn [2]: Item.objects.all() # 显示所有的item对象 Out[2]: <QuerySet [<Item: Item object>, <Item: Item object>, <Item: Item object>]> In [3]: items = Item.objects.all() #获取所有的Item对象列表 In [4]: item_1 = items[0] # 查看item 1 In [5]: item_1.title # 查看item_1 的列值 title Out[5]: 'Tao Jian' In [7]: item_1.description # 查看item_1 的列值 description Out[7]: 'this is a person named "taojian"' In [8]: item_1.amount Out[8]: 1 2. 查询单个对象 In [10]: Item.objects.get(id=1) Out[10]: <Item: Item object> In [11]: Item.objects.get(id=1).title Out[11]: 'Tao Jian' In [15]: Item.objects.exclude(amount=0) Out[15]: <QuerySet [<Item: Item object>, <Item: Item object>, <Item: Item object>]> In [16]: Item.objects.exclude(amount=0)[0] Out[16]: <Item: Item object> In [17]: Item.objects.exclude(amount=0)[0].title Out[17]: 'Tao Jian'
创建视图和模板(views-templates)
3.1 理解urls,视图和模板
大体上,Django使用MVC矿建,models=数据模型,views=视图,controller=控制器,理解Django需要理解四个部分:URL模式,视图,模型和模板(url patterns, views, models ,templates)
URL Patterns –>> views(query date from models) –> templates根据请求的路径,决定使用哪些视图来处理请求,url将控制权交给视图, 视图是程序的逻辑层,接受http请求并返回http响应的python函数。视图在inventory/views.py中定义。每个视图都可以使用我们在inventory/models.py中定义的模型来查询需要的数据表。每个视图都依赖于对应的模板来显示对应的html内容。每个模板都是一个单独的函数,有html和一些额外的模板语法来组成。 如果请求的路径只是一个斜杠'/',那么请求将会被传递到inventory/views.py文件中的索引函数处理。该视图将使用firstdjango/templates/inventory/index.html中的模板文件生成访问该站点的页面, request : "/" ---->> Views(query date from models) ---->> templates(put data into html templates ) --->> return html with date --> user 如果请求的是"/item/1", 视图将使用该数字1来查询对应的数据,将数据塞入模板文件html中,然后发送给用户。 request:"/item/1" ---> views(query data with id "1" )--> templates(put data into html)-->return html-->user
3.2 了解网址格式
1. 正则表达式 使用正则表达式解析http请求。以下是常见的正则表达式: \d -- 数字字符 \d+ -- 至少一个数字字符 ^admin/ 以admin/开头的字符串 html$ 以html结尾的字符串 ^$ "" \S 正则表达式在线检查网站: pythex.org url.py会定义个叫做urlpatterns的列表变量,用来存储对url函数的调用列表。 url函数(正则表达式,要调用的视图, 模板名称) 正则表达式:用于匹配http请求 要调用的视图:如果匹配成功后,需要调用的视图 模板名称:templates 代码如下: from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.index, name="index") ] 程序会遍历urlpatterns中的url,依次匹配,如果全部都不匹配成功,返回404错误
3.3 配置URL模式
url.py 代码: from django.conf.urls import url from django.contrib import admin from inventory import views # 导入view模块 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', views.index, name="index"), url(r'^item/(?P<id>\d+)/', views.item_detail, name="item_detail"), ] views.py代码: from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse("<p> Reponse: index view </p>") def item_detail(request, id): return HttpResponse('<p> Response: item_details view with item id {0}'.format(id)) 当输入localhost:8000时,将显示Reponse: index view 当输入localhost:8000/item/123时候,将显示:response: item_details view with item id 1
3.4 实现视图(views)
视图实现了项目的控制层逻辑。 视图通过模型查询数据库,使用模板生成HTML.