day41Django

一、 DJANGO使用指南


Django简介:

Django官网地址

Django发布于2005年7月,是当前Python世界里最有名且成熟的网络框架。 最初是被开发用于管理劳伦斯出版集团旗下的以新闻内容为主的网站的,即CMS(内容管理系统)软件。

Django是一个用Python编写的开放源代码的Web应用框架,代码是开源的。此系统采用了MVC的框架模式, 也可以称为MTV模式


什么是MVC模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。 通俗的来讲就是,强制性的使应用程序的输入,处理和输出分开。

核心思想:解耦

优点:减低各个模块之间的耦合性(模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准),方便变更,更容易重构代码,最大程度的实现了代码的重用

MVC(Model, View, Controller)
Model: 即数据存取层。用于封装于应用程序的业务逻辑相关的数据,以及对数据的处理。说白了就是模型对象负责在数据库中存取数据

View: 即表现层。负责数据的显示和呈现。渲染的html页面给用户,或者返回数据给用户。

Controller: 即业务逻辑层。负责从用户端收集用户的输入,进行业务逻辑处理,包括向模型中发送数据,进行CRUD操作。

图解:


浏览器中MVC的表现形式图解:



Django的模式简介

MVT模式

严格来说,Django的模式应该是MVT模式,本质上和MVC没什么区别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同。

Model: 负责业务与数据库(ORM)的对象

View: 负责业务逻辑并适当调用Model和Template

Template: 负责把页面渲染展示给用户

注意: Django中还有一个url分发器,也叫作路由。主要用于将url请求发送给不同的View处理,View在进行相关的业务逻辑处理。

二、VIRTUALENV虚拟环境创建指南


前言
  1. 本教程中使用到的python版本均为python3.x版本,由于本人安装的是python3.6.3版本,所以以下的课程均是在此基础上进行的。
     

  2. virtualenv使用场景:当开发成员负责多个项目的时候,每个项目安装的库又是有很多差距的时候,会使用虚拟环境将每个项目的环境给隔离开来。
     

    比如,在有一个老项目已经开发维护了3年了,里面很多库都是比较老的版本了。例如python使用的是2.7版本的。但是新项目使用的python版本是3.6的。为了解决这种项目执行环境的冲突,所以引入了虚拟环境virtualenv。

当然除了virtualenv可以起到隔离环境的作用,还有其他技术方案来实现,而且上线流程简单,大大减轻运维人员的出错率,比如每一个项目使用一个docker镜像,在镜像中去安装项目所需的环境,库版本等等

python环境的配置

  1. 在cmd中能通过python去启动,如果不行直接跳到第三步


  1. 在cmd中能通过pip3启动安装软件,如果不行直接跳到第三步



3.配置python环境和pip环境


  1. 确认pip安装成功,如果Scritp文件夹下没有pip可执行文件,则执行第五步。

  2. 由于python3.6安装以后,在Scripts文件中没有pip的可执行软件,需要输入一下命令进行安装

python -m ensurepip

注:现在在python的安装文件夹Scripts下就有pip.exe以及easy_install.exe等可执行文件了,就可以使用pip安装啦~

windows中安装使用

  1. 安装virtualenv
pip install  virtualenv
  1. 创建虚拟环境

先查看一下安装虚拟环境有那些参数,是必须填写的


注意两个参数:
--no-site-packages和-p参数

virtualenv --no-site-package -p(python环境变量,若环境变量
路径有空格,就用引号把环境变量引上,最好不要有中文)venv

以下是指定安装虚拟环境中的python版本的安装方式:



3. 进入/退出env

进入 cd env/Scripts/文件夹  在activate命令

退出 deactivate

Note:

  1. 创建virtualenv虚拟环境之前,系统中必须要安装有对应版本的python,并且卸载之后当前虚拟环境就无效了。系统中可以同时存在python2和python3,通过环境变量中的系统变量path(不是用户变量)控制cmd或者系统中使用哪个版本的python,哪个版本的路径在前面就优先使用哪个版本。
  2. –no-site-packages表示不包括系统全局的Python安装包,这样会更令环境更干净
  3. –python=python3.6指定Python的版本未系统已经安装了的Python3.6
  4. env是建立的虚拟环境名称

5 .没有安装python3.6或者使用命令virtualenv --no-site-packages --python=python3.6 env会出现The executable python does notexist 错误

ubuntu中安装使用

  1. 安装virtualenv
apt-get install python-virtualenv
  1. 创建包含python3版本的虚拟环境
virtualenv -p /usr/bin/python3 env

env代表创建的虚拟环境的名称

3. 进入/退出env

进入 source env/bin/activate

退出 deactivate
  1. pip使用

    查看虚拟环境下安装的所有的包

    pip list
    

    查看虚拟环境重通过pip安装的包

    pip freeze
    

三、DJANGO使用指南

创建Django项目

1. 首先创建一个运行Django项目的虚拟环境(virtualenv)

虚拟环境的创建在基础课程中讲解,地址
该虚拟环境中有django库,python3,pymysql等等需要的库

大致在罗列下安装了那些库:

pip install Django==1.11(要在虚拟环境里安装)

pip install PyMySQL
2. 创建一个Django项目

2.1 创建项目

django-admin startproject halloWorld

该命令是创建一个名为halloWorld的工程

项目目录介绍

下面展示创建以后的文件,具体有哪些文件:


manage.py: 是Django用于管理本项目的管理集工具,之后站点运行,数据库自动生成,数据表的修改等都是通过该文件完成。manage.py接受的是Django提供的内置命令。

_init_.py: 指明该目录结构是一个python包,暂无内容,在后期会初始化一些工具会使用到。

seetings.py: Django项目的配置文件,其中定义了本项目的引用组件,项目名,数据库,静态资源,调试模式,域名限制等

urls.py:项目的URL路由映射,实现客户端请求url由哪个模块进行响应。

wsgi.py:定义WSGI接口信息,通常本文件生成后无需改动

2.2 运行Django项目

python manage.py runserver 端口(或ip地址:端口
,不能直接写ip地址)

该命令是运行项目,端口可以不用写,启动的时候会默认随机创建一个可以使用的端口

2.2 创建apps

python manage.py startapp apps

该命令是在blog工程下创建一个名为apps的app,进入虚拟环境后,先下载pymsql模块,在setting.py 里DATABASES配置数据库(名字,用户名,密码,host,port等),在INSTALLED_APPS列表后面加上创建app的名字,例如:'apps'.

在控制台输入python manage.py makemigrations和python manage.py migrate。成功后可以在MySQL查看关联的表。

在控制台输入python manage.py runserver 进入网址,在网址后面加/admin 可进入Django管理

3. settings.py配置文件详细解读
a) 设置语言:

LANGUAGE_CODE = 'zh-Hans' 表示中文
LANGUAGE_CODE = 'en-us' 表示英文

设置时区: TIME_ZONE = 'Asia/Shanghai'

b) 时区解释: (需要详细回顾思考时区问题)

UTC:世界标准时间,也就是平常说的零时区。
北京时间表示东八区时间,即UTC+8

四、 模型使用指南

前言

Djang自身集成了管理后台,在管理后台中可以对我们自定义model进行CRUD操作,也能进行列表展示解析,分页等等

使用admin管理后台

0. 准备工作,在model中定义Student的模型
```
class Students(models.Model):
    name = models.CharField(max_length=10)
    sex = models.BooleanField()

    class Meta:
        db_table = 'student'
```
1. admin管理后台的url
在工程目录下可以看到路由配置中有一个admin的url地址
```
url(r'^admin/', admin.site.urls),
```
2. 创建admin后台的用户密码
```
python manage.py createsuperuser
```
3. 在登录后的管理后台中对自定义的模型进行CRUD操作
在管理后台中操作模型对象。需要在app的admin.py中写如下代码
```
admin.site.register(模型名)
```
4. 继承admin.ModelAdmin,编写自定义的admin
```
class StudentAdmin(admin.ModelAdmin):
    def set_sex(self):
        if self.sex:
            return '男'
        else:
            return '女'
    set_sex.short_description = '性别'
    list_display = ['id', 'name', set_sex]
    list_filter = ['sex']
    search_fields = ['name']
    list_per_page = 1

admin.site.register(模型名, StudentAdmin)
```

其中:<br>
list_display: 显示字段  <br>
list_filter: 过滤字段   <br>
search_fields: 搜索字段 <br>
list_per_page: 分页条数 <br>
5. 使用装饰器去实现注册
```
@admin.register(模型名)
class StudentAdmin(admin.ModelAdmin):
    def set_sex(self):
        if self.sex:
            return '男'
        else:
            return '女'
    set_sex.short_description = '性别'
    list_display = ['id', 'name', set_sex]
    list_filter = ['sex']
    search_fields = ['name']
    list_per_page = 1
```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容