###目录:
#1.简介
###MVC
- 大部分开发语言中都有MVC框架
- MVC框架的核心思想是:解耦
- 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用
- m表示model,主要用于对数据库层的封装
- v表示view,用于向用户展示结果
- c表示controller,是核心,用于处理请求、获取数据、返回结果
###MVT
- Django是一款python的web开发框架
- 与MVC有所不同,属于MVT框架
- m表示model,负责与数据库交互
- v表示view,是核心,负责接收请求、获取数据、返回结果
- t表示template,负责呈现内容到浏览器
Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!
Django官方网站
Django官方文档
安装Django官方文档介绍
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。
BSD:BSD许可证是随着加州大学伯克利分校发布BSD UNIX发展起来的,修改版本被Apple、Apache所采用。BSD协议是“宽容自由软件许可证”中的一员,在软件复用上给予了最小限度的限制。
BSD协议允许作者使用该协议下的资源,将其并入私人版本的软件,该软件可使用闭源软件协议发布。
#2.环境搭建
1 | 复制代码sudo apt-get update |
对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间,而且好多软件总是被墙,所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以解决被墙导致的装不上库的烦恼,提高安装成功率。网上有很多可用的源,这里推荐的是清华大学的pip源,它是官网pypi的镜像,每隔5分钟同步一次。
Linux下,修改 ~/.pip/pip.conf (没有就创建一个),按下Ctrl + H 可以看到隐藏文件,修改 index-url至tuna,内容如下:
1 | 复制代码[global] |
4.利用pip安装 Django(推荐使用1.11版本)
1 | 复制代码(sudo)pip install Django |
检查是否安装成功
1 | 复制代码>>> import django |
#3.安装pycharm
- 下载JDK
2. 解压
输入命令:tar zvxf jdk-8u131-linux-x64.tar.gz
3. 创建jvm文件
输入命令:sudo mkdir /usr/lib/jvm
4. 移动到/usr/lib/jvm下
输入命令:sudo mv jdk1.8.0_131/ /usr/lib/jvm/
**注意:**如果没有jvm文件,执行该语句虽然会自动创建jvm文件,但只会把jdk1.8.0_25里面的文件都放到jvm中,而不是把jdk1.8.0_25及其里面的文件放到jvm文件中,两者是有区别的
5. 设置JDK环境变量
(也有在/.bashrc修改的,区别是:/etc/profile的设置方法对所有登陆用户都有效/.bashrc只对当前用户有效)
输入命令:sudo vim ~/.profile
编辑:
1 | 复制代码export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131 |
- 使修改立刻生效
source ~/.profile
- 验证JDK
输入命令:java -version
#4.Ubuntu下 正确安装VMware Tools
为了实现可以从windows拖拽文件到ubuntu,可以安装VMware Tools。
#5.Django主要模块
- urls.py
网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。 - views.py
处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页。 - models.py
与数据库操作相关,存入或读取数据时用到这个,当然用不到数据库的时候 你可以不使用。 - forms.py
表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,当然你也可以不使用。 - templates 文件夹
views.py 中的函数渲染templates中的Html模板,得到动态内容的网页,当然可以用缓存来提高速度。 - admin.py
后台,可以用很少量的代码就拥有一个强大的后台。 - settings.py
Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。
#6.Django基本命令
- 新建一个 django project
1 | 复制代码django-admin.py startproject project_name |
注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b。
- 新建 app
要先进入项目目录下,cd project_name 然后执行下面的命令(下同,已经在项目目录下则不需要 cd project_name)
1 | 复制代码python manage.py startapp app_name |
一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。
与项目名类似 app name 也需要为合法的 Python 包名,如 blog,news, aboutus 等都是合法的 app 名称。
- 创建数据库表 或 更改数据库表或字段
1 | 复制代码Django 1.7.1及以上 用以下命令 |
这种方法可以在SQL等数据库中创建与models.py代码对应的表,不需要自己手动执行SQL。
备注:对已有的 models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具 south
- 使用开发服务器
开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。
1 | 复制代码python manage.py runserver |
- 清空数据库
1 | 复制代码python manage.py flush |
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
- 创建超级管理员
1 | 复制代码python manage.py createsuperuser |
- Django 项目环境终端
1 | 复制代码python manage.py shell |
#7. Django视图与网址
###1.Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类)。
- 新建一个项目(project), 名称为 zebk
1 | 复制代码django-admin startproject zebk |
备注: 如果 django-admin 不行,请用 django-admin.py
2. 新建一个应用(app), 名称叫 zhong
1 | 复制代码python manage.py startapp zhong # zhong 是一个app的名称 |
- 注:Django 1.8.x 以上的,还有一个 migrations 文件夹。Django 1.9.x 还会在 Django 1.8 的基础上多出一个 apps.py 文件。
把我们新定义的app加到settings.py中的INSTALL_APPS中
修改 mysite/mysite/settings.py
1 | 复制代码INSTALLED_APPS = ( |
作用:新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)
###2.定义视图函数(即访问页面时显示的内容)
打开/zebk下的views.py文件 增加以下内容
1 | 复制代码# -*- coding: utf-8 -*- |
- 第一行是声明编码为
utf-8
, 因为我们在代码中用到了中文,如果不声明就报错. - 第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的
print
一样,只不过HttpResponse
是把内容显示到网页上。 - 我们定义了一个
index()
函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容,用户浏览器,系统等信息在里面(后面会讲,先了解一下就可以)。 - 函数返回了一个
HttpResponse
对象,可以经过一些处理,最终显示几个字到网页上。
###3. 定义视图函数函数相关的URL
- 定义视图函数相关的URL(网址) (即规定 访问什么网址对应什么内容)
打开 mysite/mysite/urls.py 这个文件, 修改其中的代码:
在mysite/urls.py,导入django.conf.urls.include模块,并且添加到urlpatterns列表,所以mysite/urls.py如下:
1 | 复制代码# mysite/urls.py |
2.在zhong中创建urls.py,编写如下:
1 | 复制代码from django.conf.urls import url |
然后在终端上运行 python manage.py runserver 我们会看到类似下面的信息:
1 | 复制代码 python manage.py runserver |
打开网页,输入127.0.0.1:8000/zhong/
#8.管理操作
- 站点分为“内容发布”和“公共访问”两部分
- “内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。为此,Django会根据定义的模型类完全自动地生成管理模块
###使用django的管理
创建一个管理员用户
1 | 复制代码python manage.py createsuperuser,按提示输入用户名、邮箱、密码 |
- 启动服务器,通过“127.0.0.1:8000/admin”访问,输入上面创建的用户名、密码完成登录
- 进入管理站点,默认可以对groups、users进行管理
###管理界面本地化
- 编辑settings.py文件,设置编码、时区
1 | 复制代码LANGUAGE_CODE = 'zh-Hans' |
###向admin注册booktest的模型
- 打开booktest/admin.py文件,注册模型
1 | 复制代码from django.contrib import admin |
- 刷新管理页面,可以对BookInfo的数据进行增删改查操作
- 问题:如果在str方法中返回中文,在修改和添加时会报ascii的错误
- 解决:在str()方法中,将字符串末尾添加“.encode(‘utf-8’)”
###自定义管理页面 - Django提供了admin.ModelAdmin类
- 通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
1 | 复制代码class QuestionAdmin(admin.ModelAdmin): |
#####列表页属性
- list_display:显示字段,可以点击列头进行排序
1 | 复制代码list_display = ['pk', 'btitle', 'bpub_date'] |
- list_filter:过滤字段,过滤框会出现在右侧
1 | 复制代码list_filter = ['btitle'] |
- search_fields:搜索字段,搜索框会出现在上侧
1 | 复制代码search_fields = ['btitle'] |
- list_per_page:分页,分页框会出现在下侧
1 | 复制代码list_per_page = 10 |
#####添加、修改页属性
- fields:属性的先后顺序
1 | 复制代码fields = ['bpub_date', 'btitle'] |
- fieldsets:属性分组
1 | 复制代码fieldsets = [ |
#####关联对象
- 对于HeroInfo模型类,有两种注册方式
+ 方式一:与BookInfo模型类相同
+ 方式二:关联注册
- 按照BookInfor的注册方式完成HeroInfo的注册
- 接下来实现关联注册
1 | 复制代码from django.contrib import admin |
- 可以将内嵌的方式改为表格
1 | 复制代码class HeroInfoInline(admin.TabularInline) |
#####布尔值的显示
- 发布性别的显示不是一个直观的结果,可以使用方法进行封装
1 | 复制代码def gender(self): |
本文转载自: 掘金