作者:白宁超

2017年8月24日09:37:35

摘要:Django的学习教程也是分门别类,形式不一。或是较为体系的官方文档,或者风格自由的博客文档,或者偏向实例的解析文档。即使官方文档,章节较多,文字阐述累赘,有时候我们只是关注某个功能用法而已,而自由博文最大的问题是互相抄袭,结构混乱,涵盖面小且错误较为明显。由此,本文结合学习期间资料梳理和项目开发经验,整理出一套较为常用实用的文章。适用于(1)新手入门,无论C#,C,java,Python,R等具有任何编程语言基础均可;(2)想快速了解Django并可以快速开发上手者。(3)适用于作为资料查询,技术点参考。

1 几个基本概念

前置条件:假设读者基本Python语言基础,或者具备某种编程语言的基础。你还熟悉web开发环境,懂些css,js,db等。

Django是什么?

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

-----维基百科

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

----百度百科

MTV开发模式?

Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:

(1) 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。

(2) 视图(View),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。

(3) 模板(Template),即业务逻辑层 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。

Django的架构?

让我们一览 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 的开关,静态文件的位置等。

上面的py文件不理解也没有关系,后面会详细介绍。一图胜千言,架构全貌工作机制如下所示:

Django大家都在使用的商业网站

Sohu 邮箱  、果壳网  、 豆瓣  、 爱调研 、 易度在线云办公 、 优容网  、 快玩游戏、九九房、贷帮网 、 趣奇网 、知乎、时尚时空 、游嘻板: YxPad webpy、DNSPod 国际版 、下厨房  、 贝太厨房 、 Wopus问答 、 咕咚网 、扇贝网 、站长工具、易度文档管理系统、个人租房、 在线文档查看-易度云查看 、 FIFA310 足球数据分析专家、 搜狐随身看等等。

2 Django配置准备

前置条件:pip、python、sublime、anaconda环境已经安装。

后置条件:

pip install django

检查是否安装成功:

xxx数据统计分析(决策)平台

系统环境:WIN10 64bit

开发环境:sublime+Anaconda

数据库:Mysql 5.6.17

语言:python3.5

框架:django1.11+Bootstrap

可视化工具:Highchart|Echarts|plotly|Bokeh(采用Echarts)

3 Django基础配置安装

1 创建项目,项目决策分析:xmjc_analysis

在E盘根目录下创建xmjc_analysis:

django-admin startproject xmjc_analysis

效果:

settings.py 项目的设置文件

urls.py 总的urls配置文件

wsgi.py 部署服务器文件

__init__.py python包的目录结构必须的,与调用有关。

2 创建App名为analysis

django-admin startapp analysis

效果:

3 新定义的app加到settings.py中的INSTALL_APPS中

4 视图和网址创建第一个页面

(1)我们在analysis这个目录中,把views.py打开,修改其中的源代码:

'''

第一个页面

author:白宁超

site:http://www.cnblogs.com/baiboy/

'''

#coding:utf-8

from django.shortcuts import render

from django.http import HttpResponse

def index(request):

return HttpResponse(u"欢迎进入第一个Django页面!")

第一行是声明编码为utf-8, 因为我们在代码中用到了中文,如果不声明就报错.

第二行引入HttpResponse,它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。

我们定义了一个index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容。

(2)我们打开 xmjc_analysis/xmjc_analysis/urls.py 这个文件, 修改其中的代码:

from django.conf.urls import url

from django.contrib import admin

from analysis import views as analysis_views

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^index/$', analysis_views.index,name='index'),# 首页

]

(3)本地运行服务器测试

注意在项目根目录xmjc_analysis运行结果如下:

(4)页面传参数,显示欢迎‘admin’字样

修改view.py源码:

通过get方式接受页面参数,当然也可以采用post,结合form实现。效果如下

5 配置简单数据库操作,默认sqlite,咱们指定mysql数据库

(1)在xmjc_analysis/settings.py文件下修改如下:

'''

配置Mysql数据库

2017年7月26日16:40:38

白宁超

'''

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'test',

'USER': 'test',

'PASSWORD': 'test123',

'HOST':'localhost',

'PORT':'3306',

},

}

xmjc_analysis/__init__.py下修改:

import pymysql

pymysql.install_as_MySQLdb()

(2)在analysis/models.py下设计数据库表,采用ORM方式

from django.db import models

# Create your models here.

class User(models.Model):

username = models.CharField('用户名', max_length=30)

userpass = models.CharField('密码',max_length=30)

useremail = models.EmailField('邮箱',max_length=30)

usertype = models.CharField('用户类型',max_length=30)

def __str__(self):

return self.username

(3) 在analysis/admin.py中定义显示数据

from django.contrib import admin

from .models import User

class UserAdmin(admin.ModelAdmin):

list_display = ('username','userpass','useremail') # 自定义显示字段

admin.site.register(User,UserAdmin)

(4)创建更改的文件,将生成的py文件应用到数据库

python manage.py makemigrations

python manage.py migrate

(5)创建超级管理员:用户名,test;密码密码:test123456

python manage.py createsuperuser

(6)登录后台查看信息

运行服务器:python manage.py runserver

可以看到后台信息,并对数据表进行增删改查操作,但是后台全部英文,可以改为中文显示?

后台管理设置为中文显示,xmjc_analysis/settings.py下修改代码:

LANGUAGE_CODE = 'zh-Hans' # 中文显示

再去查看:

(7)Django 提供的 QuerySet API,shell玩转MySql

在xmjc_analysis下输入【 python manage.py shell】,然后查询数据表。

创建一条用户信息:

User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")

后台查看:

其他操作方式:

# 方法 1

User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")

# 方法 2

twz =User(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超级管理员")

twz.save()

# 获取对象:

Person.objects.all()

# 满足条件查询

User.objects.filter(username="李白")

# 迭代查询:

es = Entry.objects.all()

for e in es:

print(e.headline)

# 查询排序:

User.objects.all().order_by('username')

# 链式查询:

User.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com")

# 去重查询:

qs = qs.distinct()

# 删除操作:

User.objects.all().delete()

# 更新操作:

Person.objects.filter(name__contains="abc").update(name='xxx')

数据的导出:

python manage.py dumpdata [appname] > appname_data.json

python manage.py dumpdata blog > blog_dump.json

导出用户数据

python manage.py dumpdata auth > auth.json # 导出用户数据

(8)批量向数据表导入数据

将name.txt导入数据库:

数据导入源码:

#!/usr/bin/env python

#coding:utf-8

#

from django.core import serializers

import json

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xmjc_analysis.settings")

'''

Django 版本大于等于1.7的时候,需要加上下面两句

import django

django.setup()

否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

'''

import django

import json

if django.VERSION >= (1, 7):#自动判断版本

django.setup()

def main():

from analysis.models import User

f = open('./readme/files/name.txt',encoding='utf-8')

for line in f:

name,pwd,email,type = line.split('|')

User.objects.create(username=name,userpass=pwd,useremail=email,usertype=type)

f.close()

def jsondb():

from analysis.models import User

data = eval(serializers.serialize("json", User.objects.all())) # json

userdata = json.dumps(data)

print(type(userdata))

if __name__ == "__main__":

main()

# jsondb()

print('插入完毕!')

查看结果:

>> 至此,基本熟悉上手了。深入学习待续...

pythondjango教程_【秒懂】号称最为简明实用的Django上手教程相关推荐

  1. 【秒懂】号称最为简明实用的Django上手教程

    https://www.cnblogs.com/baiboy/p/django1.html 阅读目录 1 几个基本概念 2 Django配置准备 3 Django基础配置安装   摘要:Django的 ...

  2. 【秒懂】号称最为简明实用的Django上手教程(下)

    号称最为简明实用的Django上手教程(下) 作者:白宁超 2017年8月25日08:51:58 摘要:上文 号称[最为简明实用的Django上手教程]介绍了django基本概念.配置和相关操作.相信 ...

  3. 号称最为简明实用的Django上手教程(下)

    1 前景回顾 系统环境:WIN10 64bit 开发环境:sublime+Anaconda 数据库:Mysql 5.6.17 语言:python3.5 框架:django1.11+Bootstrap ...

  4. 微软 python教程_最强福利——来自微软的Python学习教程(开发指南)

    各位小伙伴们,大家有多久没有发现柳猫这么勤奋的更新啦~ 今天给小伙伴们带来微软的官方福利,你没看错,就是来自微软的官方Python学习教程(开发指南)~ 之前微软上线过一套 Python 教程< ...

  5. python pycharm 书籍_一份超级完整实用的 PyCharm 图解教程,8K 字赶紧收藏起来

    转载自今日头条:Python之眼 PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行 ...

  6. pycharm导入jieba包_一份超级完整实用的PyCharm图解教程,赶紧收藏起来

    PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家. ...

  7. python星空画法教程_零基础也能画好的星空教程|利用午休时间画出你的星辰大海...

    图片发自简书App 图片发自简书App 今天的上海在下雨.办公室的落地窗外,天色很暗,狂风吹得树木乱舞,大雨猛烈地打在窗户上,风和雨发出恐怖的叫声,路上满是狼狈的行人与车辆.室外的风雨交加与室内的安静 ...

  8. opengl 贴图教程_如何使用叶贴图可视化空气污染-深入教程

    opengl 贴图教程 In my previous story on forecasting air pollution, I looked into using recurrent neural ...

  9. python3.6 django教程_【Python3.6+Django2.0+Xadmin2.0系列教程一】环境搭建及项目创建

    由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理.最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧. 好了,话不多说,下面开始进入正题: 环境需求: ...

最新文章

  1. Linux内核中断底半部处理--工作队列
  2. elementui 进度条怎么做_小E,Excel中这样的进度条是怎么做出来的?
  3. 二、PHP框架Laravel学习笔记——路由的定义和控制器
  4. 对过去css+div的总结
  5. Go1.18 新特性:多 Module 工作区模式
  6. 蓝桥杯 ALGO-141 算法训练 P1102
  7. 使用Microsoft Sync Framework做文件同步
  8. WPF界面设计辅助工具--Blend
  9. html转换为pdf c#,HTML转PDF(C# itextsharp)
  10. CSS单行文本溢出时显示省略号
  11. 原生开发什么意思_原生App是什么意思
  12. 视频压缩软件APP有哪些?让我来告诉你答案
  13. ubuntu中GoldenDict的使用
  14. 关于博客笔记大汇总,持续更新迭代
  15. sketchup 图片转模型_紫天学习星球教学:如何在SU里把JPG图片变成三维模型
  16. python闯关2-罗马数字编码
  17. 调停者模式(Mediator) Java实现
  18. 骨传导耳机会损伤大脑吗?一分钟详细了解骨传导耳机
  19. 华为中兴面试之浅谈~
  20. 【QT】QT之QElapsedTimer计时

热门文章

  1. CSS字体透明度怎么设置?
  2. 去哪儿12306候补购票怎么用?
  3. 字节跳动2019届校招笔试题
  4. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十一)阶段性小结
  5. 如何有效提高生产车间的生产效率呢?
  6. ROS2读取realsense摄像头数据并发布topic到ros2
  7. SAP 银企直连 常用事务代码,表名,类名
  8. SQL查询JSON格式的字段值 JSON_UNQUOTE与JSON_EXTRACT 去除SQL中双引号
  9. PHP strtoupper函数解析
  10. PHp勾股定理,2.6 探索勾股定理(1)