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

https://www.cnblogs.com/baiboy/p/django1.html

 

摘要: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环境已经安装。

后置条件:

1
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:

1
django-admin startproject xmjc_analysis

效果:

settings.py 项目的设置文件
urls.py 总的urls配置文件
wsgi.py 部署服务器文件
__init__.py python包的目录结构必须的,与调用有关。

2 创建App名为analysis

1
django-admin startapp analysis

效果:

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

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

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

1
2
3
4
5
6
7
8
9
10
'''
第一个页面
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 这个文件, 修改其中的代码:

1
2
3
4
5
6
7
8
9
10
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文件下修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'''
配置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下修改:

1
2
import pymysql
pymysql.install_as_MySQLdb()

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

1
2
3
4
5
6
7
8
9
10
11
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中定义显示数据

1
2
3
4
5
6
7
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文件应用到数据库

1
2
python manage.py makemigrations
python manage.py migrate

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

1
python manage.py createsuperuser

(6)登录后台查看信息

运行服务器:python manage.py runserver

 

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

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

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

再去查看:

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

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

创建一条用户信息:

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

后台查看:

其他操作方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 方法 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 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()
1
2
# 更新操作:
Person.objects.filter(name__contains="abc").update(name='xxx')
1
2
3
数据的导出:
python manage.py dumpdata [appname] > appname_data.json
python manage.py dumpdata blog > blog_dump.json
1
2
导出用户数据
python manage.py dumpdata auth > auth.json # 导出用户数据

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

将name.txt导入数据库:

数据导入源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/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('插入完毕!')

查看结果:

 

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

转载于:https://www.cnblogs.com/Ryan-Yuan/p/11545023.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马斯克:今年占全球发射质量65%,星舰5月或首次轨道试飞

来源:澎湃新闻 作者:张静 马斯克透露,星舰有望5月开展首次轨道飞行测试,SpaceX计划今年的发射占全球发射质量的65%左右,“粗略计算是16吨*50次发射800吨。”3月22日,马斯克在社交媒体上表示,星舰…

spring boot 配置文件加密数据库用户名/密码

这篇文章为大家分享spring boot的配置文件properties文件里面使用经过加密的数据库用户名密码,因为在自己做过的项目中,有这样的需求,尤其是一些大公司,或者说上市公司,是不会把这些敏感信息直接透露给你,尤…

菲利普·安德森:凝聚态物理的艺术家

来源:集智俱乐部作者:Andrew Zangwill 译者:董唯元 审校:梁金 编辑:邓一雪 导语物理学家P.W.安德森(Philip Anderson)因无序和磁性材料方面的工作获得1977年诺贝尔物理学奖,但这并不足以彰显他的贡献。他推动多体理论与固体物理的…

清华刘知远:大模型「十问」,寻找新范式下的研究方向

来源:智源社区作者:刘知远整理:李梦佳大模型的出现迎来了AI研究的新时代,其所带来的结果提升十分显著,超越了很多领域中针对研究问题设计特定算法实现的提升。具体而言,预训练到Finetune的新范式最本质的特…

Django - ORM操作

Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线二. ForeignKey操作 正向查找反向操作三. ManyToManyField四. 聚合查询和分组查询 聚合分组五. F查询和Q查询 F查询Q查询六. 锁和事务 锁事务七. Django ORM执行原生SQL 执行原生查询直接执行自定义SQLDjango - ORM…

从王者荣耀AI看人工智能与游戏结合的未来意义

来源:央广网国际在线消息:3月18日,成都大运会倒计时100天之际,由大运会执委会主办,腾讯承办的“世界大学生数智竞技邀请赛”正式启动。这次邀请赛将融合科技、文化、竞技的赛场精神,以《王者荣耀》和腾讯AI…

String源码分析

最近开始阅读java底层的源码,是因为发现越到后面越发现读源码的重要性,真的很重要,不阅读源码,你会发现“路”越走越窄。 今天看到了String的这个构造方法, /*** Initializes a newly created {code String} object so…

575万奖金!2022年数学界「诺贝尔奖」发布,拓扑学大师获奖

来源:AI科技评论作者:西西编辑:陈彩娴3月22日晚,被誉为数学界「诺贝尔奖」的阿贝尔奖揭晓。2022年,挪威科学院决定将阿贝尔奖授予来自美国纽约市立大学研究生院的阿尔伯特爱因斯坦讲座教授、纽约州立大学石溪分校的教授…

为什么深度学习是非参数的?

来源:AI科技评论作者:Thomas Viehmann编译:钱磊编辑:陈彩娴今天我想要与大家分享的是深度神经网络的工作方式,以及深度神经与“传统”机器学习模型的不同之处。我的计划具体如下:首先简单地思考一下如何将问…

“一束光”让机器人也能拥有触觉?之江实验室这项技术惊艳世界

来源:浙江日报传递触觉的“特殊道路”我们对这个世界最初的感知通常是从触觉开始的——第一声啼哭之前,婴儿经历过诱发哭声的拍打;成长中提笔、拍球;生活中握手,敲击键盘,使用手机……触觉充斥着我们日常生…

图书管理系统~简单流程

1. 连接数据库 2. 路由url (网站目录) 2.1若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。(分组)2.2使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL中的值并以位置 参数传递给视图。在更高级的用法…

7年前轰动全球的Science论文,被发现可能搞错了

来源:iNature蛇是一个非常多样化和成功的群体,但它们的进化起源是模糊的。两条腿蛇的发现揭示了从蜥蜴到蛇的过渡,但没有描述过四条腿蛇,早期蛇的生态知之甚少。2015年7月24日,英国朴茨茅斯大学David M. Martill等人在…

Django - AJAX

一. JSON 什么是json? json指的是JavaScript对象表示法(JavaScript Object Notation)json是轻量级的文本数据交换格式独立于语言, 支持不同的编程语言具有自我描述性, 跟易理解合格的json对象: ["one", "two", "three"] { "one": 1, …

培育强人工智能的「ImageNet」:上海交大卢策吾组提出铰接物体知识库 AKB-48

来源:前沿科技编译:OGAI编辑:陈彩娴ImageNet 的出现极大推动了计算机视觉领域的发展。在通往强人工智能的路上,我们还需要考虑物体的外观、结构、物理性质、语义等因素。为此,上海交大卢策吾组近日重磅推出了大型真实世…

模块化认知:演化如何自下而上涌现出智能?

来源: 集智俱乐部作者:Michael Levin, Rafael Yuste译者:郭瑞东审校:刘志航、梁金 编辑:邓一雪 导语无论是聪明的人、哺乳动物、鸟类,还是细胞和组织、神经元网络、病毒以及蛋白质分子,在所有尺…

Stuart Russell:智能本质和人工智能安全的巨大挑战

斯图尔特罗素(Stuart Russell),加州大学伯克利分校计算机科学专业教授,著有人工智能领域“标准教科书”——《人工智能:一种现代化方法》(与谷歌研究主管Peter Norvig合著)来源:智能…

费马大定理:三百年数学圣杯的角逐

来源:和乐数学费马大定理,又被称为“费马最后的定理”。人类前赴后继挑战了三个世纪,多次震惊全世界,耗尽人类众多最杰出大脑的精力,也让千千万万业余者痴迷。费马大定理的故事与数学的历史有着千丝万缕的联系&#xf…

Django - Form和ModelForm

一. form介绍 1.生成页面可用的HTML标签 2. 提供input可以提交数据 3. 对用户提交的数据进行校验 4. 保留上次输入内容 5. 提供错误信息 二. 普通方式书写注册功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

人工智能,“抛弃”真实数据集?

来源&#xff1a;学术头条当前&#xff0c;人工智能技术已经应用在我们日常生活中的方方面面&#xff0c;比如人脸识别、语音识别、虚拟数字人等。但普遍存在的一个问题是&#xff0c;科研人员要想通过训练一个机器学习模型来执行某一特定任务&#xff08;比如图像分类&#xf…

Django - Cookie和Session

Django - Cookie和Session cookie Django中操作CookieCookie版登陆校验Session Django中Session相关方法Session流程解析Session版登陆验证Django中的Session配置Django - Cookie和Session cookie Cookie的由来 大家都知道HTTP协议是无状态的。 无状态的意思是每次请求都是独立…