开发者社区> 伏草惟存> 正文

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

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



查看结果:



 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14205 0
CentOS openssh 升级教程
低版本和centos系统默认安装的openssh版本经常会有高风险漏洞,因此openssh需要保持升级到最新版本。
892 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27723 0
centos 7 搭建wordpress 网站详细教程
centos 7 搭建wordpress 网站详细教程
4559 0
号称简明实用的Django上手教程
Django的学习教程也是分门别类,形式不一。或是较为体系的官方文档,或者风格自由的博客文档,或者偏向实例的解析文档。即使官方文档,章节较多,文字阐述累赘,有时候我们只是关注某个功能用法而已,而自由博文最大的问题是互相抄袭,结构混乱,涵盖面小且错误较为明显。
4079 0
教程:Data Lake Analytics + OSS数据文件格式处理大全
0. 前言 Data Lake Analytics是Serverless化的云上交互式查询分析服务。用户可以使用标准的SQL语句,对存储在OSS、TableStore上的数据无需移动,直接进行查询分析。
4978 0
bboss mvc快速入门教程
基于bboss开发项目说明 要做简单的demo,请参考文档 http://yin-bp.iteye.com/blog/1026261 正儿八经的做项目,参考文档搭bboss平台开发环境 普通ui版平台: http://yin-bp.
870 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
bboss elasticsearch开发视频教程
bboss elasticsearch开发视频教程 百度网盘免密下载: https://pan.baidu.com/s/1kXjAOKn
1216 0
+关注
伏草惟存
白宁超主页【https://bainingchao.github.io/】,工学硕士,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759。
28
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载