号称最为简明实用的Django上手教程

作者:白宁超

2017年8月24日09:37:35

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

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('插入完毕!')

查看结果:

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

【秒懂】号称最为简明实用的Django上手教程的更多相关文章

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

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

  2. 号称简明实用的django上手教程

    1 几个基本概念 前置条件:假设读者基本Python语言基础,或者具备某种编程语言的基础.你还熟悉web开发环境,懂些css,js,db等. Django是什么? Django是一个开放源代码的Web ...

  3. MySQL 上手教程

    安装 通过官网选择版本下载安装.Mac 上可通过 Homebrew 方便地安装: $ brew install mysql 检查安装是否成功: $ mysql --version mysql Ver ...

  4. Django 基础教程

    Django 基础教程 这是第一篇 Django 简介 »  Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...

  5. [转]Caffe 深度学习框架上手教程

    Caffe 深度学习框架上手教程 机器学习Caffe caffe 原文地址:http://suanfazu.com/t/caffe/281   blink 15年1月 6   Caffe448是一个清 ...

  6. 【django入门教程】Django的安装和入门

    很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...

  7. 新浪SAE快速上手教程

     新浪SAE快速上手教程[1]如何免费开通新浪云 2014-07-18 > 新浪SAE快速上手教程[2]如何创建.删除应用 2014-07-24 > 新浪SAE快速上手教程[3]如何上传应 ...

  8. Airtest 快速上手教程

    一.Airtest 简介: AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App. 自动化脚本录制.一键回放.报告查看,轻而易举实现自动化测试流程 支持基于图像识别的 Airt ...

  9. 最实用的深度学习教程 Practical Deep Learning For Coders (Kaggle 冠军 Jeremy Howard 亲授)

    Jeremy Howard 在业界可谓大名鼎鼎.他是大数据竞赛平台 Kaggle 的前主席和首席科学家.他本人还是 Kaggle 的冠军选手.他是美国奇点大学(Singularity Universi ...

随机推荐

  1. 使用gulp实现文件压缩及浏览器热加载

    一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载.  先再命令行里输入   npm install gulp -g   下载gulp 二.创建gulp项目 创建一个你需要 ...

  2. Python学习笔记——import模块

    OS模块 直接输出系统命令到屏幕,该方法获取的命令返回值不可被赋值给变量,输出结果受编码影响会乱码: import os os.system("ipconfig") 将执行获取的系 ...

  3. JavaScript+svg绘制的一个动态时钟

    结果图: 代码如下: <!DOCTYPE html> <html> <head> <title>动态时钟</title> </head ...

  4. Carbondata源码系列(一)文件生成过程

    在滴滴的两年一直在加班,人也变懒了,就很少再写博客了,最近在进行Carbondata和hive集成方面的工作,于是乎需要对Carbondata进行深入的研究. 于是新开一个系列,记录自己学习Carbo ...

  5. CentOS7.3虚拟机双网卡配置

    笔者在学习和工作中经常要用到linux,专门装一个linux主机固然可以,但是毕竟还要用到windows,解决的办法就是用vmware来搭建linux虚拟机.关于linux虚拟机上网的问题,笔者写过很 ...

  6. iOS App签名的原理

    前言 相信很多同学对于iOS的真机调试,App的打包发布等过程中的各种证书.Provisioning Profile. CertificateSigningRequest.p12的概念是模糊的,导致在 ...

  7. 【PHP】 安装参数

    1. 配置参数 './configure' '--prefix=/usr/local/php5.2' '--with-apxs2=/usr/sbin/apxs' '--with-mysql=/usr/ ...

  8. 设计模式的征途—16.访问者(Visitor)模式

    在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示. 在软件开发中,有时候也需 ...

  9. git 安装 和 基本操作

    林纳斯的小故事 感兴趣的同学可以自己百度一下 版本控制常用svn git @@@svn 1 搭建环境 server:visualSVN Serverserver port: https 默认443ht ...

  10. android rss阅读器开发一点小技巧

    这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override publi ...