都说Djnago框架重,那就让哥用15行代码写个django web程序!
很多初学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 project import sys from django.conf import settings from django.conf.urls import url from django.http import HttpResponse from django.core.management import execute_from_command_line settings.configure( DEBUG = True, # 调试状态 SECRET_KEY = 'iamasecretkeyhahahaha', # 默认的session需要的key,也为了CSRF ROOT_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_line settings.configure( DEBUG = True, # 调试状态 SECRET_KEY = 'iamasecretkeyhahahaha', # 默认的session需要的key,也为了CSRF ROOT_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 data return 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]

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
企业集群平台架构实现与应用实战(HAproxy+keepalived篇)
一、四层和七层负载均衡的区别 所谓的四层就是ISO参考模型中的第四层。四层负载均衡也称为四层交换机,它主要是通过分析IP层及TCP/UDP层的流量实现的基于IP加端口的负载均衡。常见的基于四层的负载均衡器有LVS、F5等。 以常见的TCP应用为例,负载均衡器在接收到第一个来自客户端的SYN请求时,会通过设定的负载均衡算法选择一个最佳的后端服务器,同时将报文中目标IP地址修改为后端服务器IP,然后直接转发给该后端服务器,这样一个负载均衡请求就完成了。从这个过程来看,一个TCP连接是客户端和服务器直接建立的,而负载均衡器只不过完成了一个类似路由器的转发动作。在某些负载均衡策略中,为保证后端服务器返回的报文可以正确传递给负载均衡器,在转发报文的同时可能还会对报文原来的源地址进行修改。整个过程下图所示。 同理,七层负载均衡器也称为七层交换机,位于OSI的最高层,即应用层,此时负载均衡器支持多种应用协议,常见的有HTTP、FTP、SMTP等。七层负载均衡器可以根据报文内容,再配合负载均衡算法来选择后端服务器,因此也称为“内容交换器”。比如,对于Web服务器的负载均衡,七层负载均衡器不但可以根据“...
- 下一篇
MySQL索引原理及慢查询优化
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更 好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所 以查询语句的优化显然是重中之重。 本人从13年7月份起,一直在美团核心业务系统部做慢查询的优化工作,共计十余个系统,累计解决和积累了上百个慢查询案例。随着业务的复杂性提升,遇到的问题千奇百怪,五花八门,匪夷所思。本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。 一个慢查询引发的思考 select count(*) from task where status=2 andoperator_id=20839 andoperate_time>1371169729 andoperate_time<1371174603 andtype=...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)