最近学习了下python的框架 django ,在这做下笔记
安装部分省去,安装好了后.
1. 建立project .首先是要建立一个项目,django会自动生成一些项目中需要使用的文件,使得其符合django的标准.具体是进入你要建立project的目录然后使用 django-admin.py startproject djangotest 命令,这时候在你当前的目录下会产生名为
djangotest的目录,目录下有四个文件
__init__.py 空文件,使python认为这是个package
manage.py 使用命令的工具,比如起服务 runserver
settings.py 这个当然是一些关于工程的设置
urls.py url 匹配当相应的方法,就像struts的struts-config.xml
2 建立app.接下来要建立app ,app存在于project中,一个project可以有多个app.可以把app理解为一个模块。这里就和java里的分类方式比较的不同,在java中一般是按照层来分包的,比如dao是一个包,service是一个包,而在django中,一个模块是一个包。
进入djangotest目录运行 django-admin.py startapp codegen,会产生一个新的目录,名字是codegen,下面有三个文件
__init__.py 和上面一样
models.py 不用解释了吧
views.py 对应你要执行的动作,相当于action
实际上django可以根据你models.py里面的代码自动生成数据库的表以及字段。并自带提供一个web的管理界面,不过我现在还觉得django和数据库的连接让我觉得不是很方便,这里省去关于和数据库连接的部分。
3 设计url.这个时候就可以开始真正建立你的应用了,首先是设计你的url结构,在urls.py 中来配置你的url结构,这里用一个简单的登录功能来展示下,其url.py中
from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', (r'^djangotest/$', 'codegen.views.index'), (r'^djangotest/login$', 'codegen.views.login'), )
以 (r'^djangotest/$', 'codegen.views.index') 这句来说就是当用户访问url为 http://localhost:8000/djangotest/时就会访问到codegen下面的views.py中的index方法
4 编写view.在views.py中写下你的方法。看下views.py中的方法:
# Create your views here. from django.shortcuts import render_to_response def index(request): return render_to_response('login.html')
只是简单的转向至login.html,在django中所有的url访问都必须要配置,哪怕只是一个简单的转向。不象在jsp中,你可以根据目录的结构来访问jsp文件,虽说通过正则表达式的匹配能够是使url配置很灵活,但在我看来并没有提供多大的好处,反而多了复杂性
再来看下这个转向,如何去找到这个页面呢,这里并没有写路径啊 ,关键就在于在setting.py中有一项关于模板路径的配置
TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. "/Volumes/work/dev/python/djangotest/codegen/templates", )
配置了以后django就会在这个目录下寻找页面的文件。然后在这个目录下放入你的 'login.html'文件
<html> <head> <meta http-equiv="Content-Type" content="text/html" /> <title>登录</title> </head> <body> <form action="login" method="POST" id="generateForm">
<p>{{ errormessage }}</p> <p>User Name:</p> <p><input type="text" name="username" id="username" /></p> <p>Password:</p> <p><input type="password" name="password" id="password" /></p> <p><input type="submit" value="submit" /></p> </form> </body> </html>
现在你可以用 python manage.py runserver这个命令来启动你的服务,然后访问lhttp://localhost:8000/djangotest/就可以看到你的登录页面。
5.页面与后台的传值
在j2ee中一般使用request来进行页面和后台之前的传值,在前台展现用jsp,在django中也是用的request来传值,在页面展现有自己的模板语言,但不同的是他禁止你在页面上直接使用python语言。
当我们点登录的时候会执行views.py中的login方法
def login(request): username =request.POST["username"] password =request.POST["password"] if username =="test" and password == "test": return render_to_response('success.html',{"username":username}) else: return render_to_response('login.html',{"errormessage":"login failed"})
可以看到我们用的request.POST来取得参数,这个属性实际上是一个字典类型,可以使用字典类型可以用的所有方法。我们取得用户在页面上输入的用户名密码,如果为test就成功,如果不是就是失败。可以看到我们仍然是通过一个字典类型向页面上传值。
在success中:
<html> <head> <meta http-equiv="Content-Type" content="text/html" /> <title>登录成功</title> </head> <body> welcome {{ username }} </body> </html>
那么如果登录成功的话就可以看到 welcome test的字样。
总的来说如果有过一些做web程序的经验的话那么学习django并不是太难,架构上还是经典的mvc架构。实际上比起java的一些框架在开发上我并不觉得django有多大的质的提高,思想还是一样,只不过是在python下