很多初学django的小伙伴都会了解到,django是个大而全的网络框架,本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。要学这么多内容,要学到猴年马月啊!?

不过世界真是奇妙,现在咱们就在猴年马月里!2016年是猴年,按农历计算,6月5日至7月3日是庚午月,正好是“猴年”里的“马月”。那么问题来了:你想不想在猴年马月里学会django呢?

下面我们尝试一下,用15行代码结合django写个web程序,来一次django的清爽体验。

django复杂吗

当然,复杂的很呢!!!如果你是跟着官方文档自学过,就会知道,那里有个初级项目是投票网站,分了6部分才讲完。而且如果你是个完完全全网络编程的初学者,估计过了第3篇才看出个这个项目的样子。而且在学习中,还需要了解django最重要的几方面内容:

比如目录结构:

运行django-admin startproject sitename后,你会看见sitename文件夹里的四个文件:

__init__.py
settings.py
urls.py
wsgi.py

再运行python manage.py startapp app01后,还可以在app01这个app的目录里看出来所谓的MTV架构。

__init__.py
admin.py
models.py # M,定义各种数据类
templates  # T,这是个目录,放html模板的,当然你可以建到项目路径下
views.py     # V,根据路由编写的响应各种请求的函数
app.py
...

如果你用过pycharm,新建工程和app后的代码结构如图所示,帅哥做的很好,直接用了。 

当然,这些只是个初级认识,后面还要学习urls处理各种路由,然后怎么定义数据库,怎么前后端传数据,手续很复杂啊!

但是,你看看人家flask,bottle,分分钟就弄出个hello world啊!立马就知道大致的框架用法了,django是不是也能这么玩呢?

清爽版本

巧了,国外早有django爱好者尝试过django的简单玩法,而且还专门写了本书。今天就抛砖引玉,大家一起来玩玩!

talk is simple, show me the code!

# -*- coding:utf-8 -*-# a mini Django projectimport sysfrom django.conf import settings
from django.conf.urls import url
from django.http import HttpResponse
from django.core.management import execute_from_command_linesettings.configure(DEBUG = True, # 调试状态SECRET_KEY = 'iamasecretkeyhahahaha', # 默认的session需要的key,也为了CSRFROOT_URLCONF = sys.modules[__name__], # url根目录的配置)def home(request):return HttpResponse('a mini django website')  # 主页urlpatterns = [url(r'^$', home), # 元组类型,默认请求发送到home函数]# 启动程序
if __name__ == "__main__":execute_from_command_line(sys.argv)

新建个文件,比如miniWeb.py,写上这些代码,然后在当前目录下,命令行运行:

>python miniWeb.py runserver

看到这些说明运行成功!

System check identified no issues (0 silenced).
June 13, 2016 - 12:23:51
Django version 1.9.7, using settings None
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

然后用浏览器打开http://localhost:8000/, wow, look at that! a mini django website应该已经出现在你的浏览器里!

是不是太简单了? 哈哈! 要的就是这种清爽感觉!爽不爽?不算注释的话,也就15行吧。

简单解释一下:这些代码其实就是把一个django标配的settings,view,url,manage几个文件进行了简化与整合,目的在于用最小的代码向你展示django的网页响应过程。 实际也就是把django中的请求生命周期放在一个文件中展示了(我们这里还没有涉及到model部分)。 

流程如下:

1.__name__这行在学习python的时候每天都会用到,就是一个入口函数,在我们这里就是一个命令行的入口,通过命令行传入runserver参数,然后django内部会自己处理;
2.然后我们打开http://localhost:8000/,这时候访问的是网站的根目录url,我们在urlpatterns里面,为这个指明了要跳转的函数,也就是home
3.在home函数中,会通过Http响应,将页面内容返回给网页前端;
4.于是,我们看到了页面内容a mini django website.

升级点的清爽版本

只有一行文字啊,这网站太low了!咱们给他加点盐,弄个html模板好不好?

还是直接看代码,关键地方我加了注释:

# -*- coding:utf-8 -*-# a mini Django project
import os  # 添加模板路径使用
import sys# 保存当前路径
BASE_PATH=  os.path.dirname(__file__)from django.conf import settings
from django.conf.urls import url
# from django.http import HttpResponse # 不需要了
from django.shortcuts import render # 渲染模板,让html中显示后台自定义内容
from django.core.management import execute_from_command_linesettings.configure(DEBUG = True, # 调试状态SECRET_KEY = 'iamasecretkeyhahahaha', # 默认的session需要的key,也为了CSRFROOT_URLCONF = sys.modules[__name__], # url根目录的配置TEMPLATE_DIRS = (os.path.join(BASE_PATH, 'templates'), # 告诉django在当前目录下找templates文件夹,这里还是元组,记得逗号!), # 这里记得有逗号,因为setting的配置也是元组INSTALLED_APPS = ( # 默认的认证和内容的app,需要添加避免传数据的错误'django.contrib.auth',  'django.contrib.contenttypes',),)def home(request):#return HttpResponse('a mini django website')  # 主页data = {'name': 'alex', 'age':18} # 通过模板语言传到页面的数据print datareturn render(request, 'index.html', {'data': data})urlpatterns = [url(r'^$', home, name='home'), # 元组类型,默认请求发送到home函数]# 启动程序
if __name__ == "__main__":execute_from_command_line(sys.argv)

比刚才多了些模板文件的内容,这时候我们还需要在当前目录下新建一个文件夹,名字就是templates,然后在里面新建一个html文件,可以像我这个一样,

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>mini django</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
</head>
<body>
<h1>显示一下data:</h1>{{ data }}<h2>分开输出:</h2><li>name:`data`.`name`</li><li>age:`data`.`age`</li>
</body>
</html>

注意里面用到了一点模板语言,用{{}}表示的,其实就是个上面render函数最后的参数替换而已。

也就是这句:

return render(request, 'index.html', {'data': data})

注意这里,为了和django默认新建工程一致,我把当前目录名和py文件名字都改成一样的了:miniDjango.

命令行运行: >python miniDjango.py runserver

再次打开浏览器,访问:http://localhost:8000/, wow, look at that!

显示一下data:{'age': 18, 'name': 'alex'}
分开输出:name:alex
age:18

是不是高大上了很多!

甚至,我们可以直接用Bootstrap的http://v3.bootcss.com/examples/jumbotron/这个模板测试一下。

首先保存这个网页的源码为bt.html文件,放到templates文件夹。

然后添加url和view函数: 如下所示:

def bt(request):data = {'title': 'alex', 'headings':['我是标题1', '我是标题2','我是标题3']} # 通过模板语言传到页面的数据return render(request, 'bt.html', {'data': data})urlpatterns = [url(r'^$', home, name='home'), # 元组类型,默认请求发送到home函数url(r'^bt/$', bt, name='bt'), # 元组类型,默认请求发送到bt函数]

然后访问http://localhost:8000/bt/就可以看见效果了! 如下图所示: 

继续学习吧

如果说学习django像做一桌大餐,上面咱们讨论的这点内容顶多是做了个番茄炒蛋。想要学习更多,还需要好好的多加练习,多和一起学习的小伙伴讨论,最好再有个名师指点。

人生苦短,我用Python,加油吧,小伙伴们!

今天django的清爽体验到这里就结束了。 欢迎留言一起讨论交流!

参考

  • http://radar.oreilly.com/2014/04/simplifying-django.html

  • Lightweight Django [book]

转载于:https://blog.51cto.com/3060674/1789105

都说Djnago框架重,那就让哥用15行代码写个django web程序!相关推荐

  1. 真香!如何用300行代码写完一个Spring基本框架?

    Spring是一个非侵入性(non-invasive)框架,其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有Spring或者其他容器的情况下运行. 看spring的源码,学习spring, ...

  2. 【Python实战】入门级都能学懂的Python爬虫之仅需8行代码一键免费下载音乐,听歌自由真这么简单?

    前言 据说互联网上 50%以上的流量都是爬虫创造的,也许你看到很多热门数据都是爬虫所创造的, 所以可以说无爬虫就无互联网的繁荣. 所有文章完整的素材+源码都在

  3. 最新后盾网Laravel框架重入门到实战 Laravel博客项目实战 陈华主讲 包含课件源码

    老师介绍 陈华,PHP明星讲师,大学生演讲网创始人,2010年开始开发整站项目,精通Laravel,Yii框架. 简 介 本套课程是一套以项目实战为主的Laravel5.2实战开发教程,是真正意义上的 ...

  4. Django Web框架教学笔记-1

    <Django Web框架教学笔记> 目录 文章目录 <Django Web框架教学笔记> 目录 Django框架的介绍 Django的安装 Django框架开发 创建项目的指 ...

  5. 4行代码,让app自动化框架支持 webview 混合应用操作

    移动端 app 自动化框架很多,但是有一些框架因为不支持混合应用测试,一直没有完全流行.比较典型的是经典的 Python 框架 uiautomator2, 这个框架简单好用,没有 appium 那样复 ...

  6. python下载文件并改名_第46p,8行代码,用Python批量重命名文件

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第46篇文章,第二阶段的课程:Python基础知识:小案例之用Python批量重命名文件. 学习本课程,建议先看一遍:[计算机基础知 ...

  7. 为什么Google上十亿行代码都放在同一个仓库里?

    导读:相对于一般公司,Google 使用了单一代码仓库,很多人不理解为什么这么做.本文作者是谷歌基础设施小组的工程师,对这个问题进行了详细解读.译者在翻译过程中受益良多,也相信大家看完之后会认为自己还 ...

  8. 如何验证 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题及其原因

    如何验证 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题及其原因 验证的流程 自助验证 为什么 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题   很多人都知道,MySQL ...

  9. JAVA5000行代码什么概念_GitHub - catstiger/mvc: 一个不超过5000行代码的,快速,简单,易用的MVC框架。...

    一个不超过5000行代码的,快速,简单,易用的MVC框架. 我们的目的是: 让MVC回归其最初的目的. 因简单而快速,超过目前各种主流MVC. 零侵入,零配置,易于测试,并且让开发者感觉不到MVC的存 ...

最新文章

  1. 是什么专业_聚焦专业:什么是好专业?考古专业明年会成为热门吗?
  2. Unity 2D游戏开发教程之摄像头追踪功能
  3. 免费学python的软件-此贴告诉你:为啥shell脚本人,不建议学python
  4. javascript中创建对象的几种方式
  5. 如何入门技术、进阶技术(技术开发人员)
  6. Java枚举益智游戏
  7. oracle v sql不存在,程序包oracle.sql不存在
  8. Azure 应用服务、虚拟机、Service Fabric 和云服务的比较
  9. 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
  10. 使用java实现简单推箱子游戏
  11. F - Ubiquitous Religions
  12. 想做电商没产品?四个选品方向,让你进入电商行业
  13. android时钟字体,抖音文字云时钟app-抖音文字云时钟安卓版(word clock)v1.0下载
  14. iOS 各种技术点网址
  15. Android开发基础入门
  16. 目前最经典有效的“阅读方法”——SQ3R阅读法
  17. 向量复习(一):定义、求解、四则运算、点积和叉积
  18. 最近做项目所积累的一些小知识(一)
  19. arcgis弧段怎么加很多点_arcgis弧段怎么加很多点_莲子心营养价值高但是太苦喝不下去怎么办?别急,加这个就好很多。......
  20. 16.Hamilton(哈密顿)回路问题

热门文章

  1. 写给那些在技术路上奔跑的人们!!!!!
  2. 百度地图搜索返回地址中经纬度为null
  3. iOS架构-分离静态库.a文件并导出.m伪代码文件(11)
  4. (011) java后台开发之泛型类
  5. (0032) iOS 开发之Block 的基础用法及注意事项1
  6. 3、kubernetes应用快速入门190625
  7. JDk8的新特性-流和内部iteration
  8. HDU - 1556 Color the ball(树状数组)
  9. 类 Class 对象、定义、方法
  10. React:入门计数器