都说Djnago框架重,那就让哥用15行代码写个django web程序!
不过世界真是奇妙,现在咱们就在猴年马月里!2016年是猴年,按农历计算,6月5日至7月3日是庚午月,正好是“猴年”里的“马月”。那么问题来了:你想不想在猴年马月里学会django呢?
下面我们尝试一下,用15行代码结合django写个web程序,来一次django的清爽体验。
django复杂吗当然,复杂的很呢!!!如果你是跟着官方文档自学过,就会知道,那里有个初级项目是投票网站,分了6部分才讲完。而且如果你是个完完全全网络编程的初学者,估计过了第3篇才看出个这个项目的样子。而且在学习中,还需要了解django最重要的几方面内容:
比如目录结构:
运行django-admin startproject sitename
后,你会看见sitename文件夹里的四个文件:
__init__.pysettings.pyurls.pywsgi.py
再运行python manage.py startapp app01
后,还可以在app01这个app的目录里看出来所谓的MTV架构。
__init__.pyadmin.pymodels.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-*-#aminiDjangoprojectimportsysfromdjango.confimportsettingsfromdjango.conf.urlsimporturlfromdjango.httpimportHttpResponsefromdjango.core.managementimportexecute_from_command_linesettings.configure(DEBUG=True,#调试状态SECRET_KEY='iamasecretkeyhahahaha',#默认的session需要的key,也为了CSRFROOT_URLCONF=sys.modules[__name__],#url根目录的配置)defhome(request):returnHttpResponse('aminidjangowebsite')#主页urlpatterns=[url(r'^$',home),#元组类型,默认请求发送到home函数]#启动程序if__name__=="__main__":execute_from_command_line(sys.argv)
新建个文件,比如miniWeb.py
,写上这些代码,然后在当前目录下,命令行运行:
>python miniWeb.py runserver
看到这些说明运行成功!
Systemcheckidentifiednoissues(0silenced).June13,2016-12:23:51Djangoversion1.9.7,usingsettingsNoneStartingdevelopmentserverathttp://127.0.0.1:8000/QuittheserverwithCTRL-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-*-#aminiDjangoprojectimportos#添加模板路径使用importsys#保存当前路径BASE_PATH=os.path.dirname(__file__)fromdjango.confimportsettingsfromdjango.conf.urlsimporturl#fromdjango.httpimportHttpResponse#不需要了fromdjango.shortcutsimportrender#渲染模板,让html中显示后台自定义内容fromdjango.core.managementimportexecute_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',),)defhome(request):#returnHttpResponse('aminidjangowebsite')#主页data={'name':'alex','age':18}#通过模板语言传到页面的数据printdatareturnrender(request,'index.html',{'data':data})urlpatterns=[url(r'^$',home,name='home'),#元组类型,默认请求发送到home函数]#启动程序if__name__=="__main__":execute_from_command_line(sys.argv)
比刚才多了些模板文件的内容,这时候我们还需要在当前目录下新建一个文件夹,名字就是templates
,然后在里面新建一个html文件,可以像我这个一样,
<!DOCTYPEhtml><html><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><title>minidjango</title><metaname="description"content=""><metaname="keywords"content=""><linkhref=""rel="stylesheet"></head><body><h2>显示一下data:</h2>{{data}}<h3>分开输出:</h3><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:alexage:18
是不是高大上了很多!
甚至,我们可以直接用Bootstrap的http://v3.bootcss.com/examples/jumbotron/这个模板测试一下。
首先保存这个网页的源码为bt.html文件,放到templates文件夹。
然后添加url和view函数: 如下所示:
defbt(request):data={'title':'alex','headings':['我是标题1','我是标题2','我是标题3']}#通过模板语言传到页面的数据returnrender(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]
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。