进行web开发时,需要跟踪大量的细节。除了显示HTML和处理表单输入外,还有其他的工作要做:
1:处理cookie,会话和登录
2:检测并显示错误
3:在数据库中存储数据
4:将网页设计与应用的应用的其他部分分离,让web设计人员无需打扰您就能进行网页设计。
Django遵循 模型(数据)-视图-控制器的一种将数据和表示分离的设计模式
模型存储数据并提供操作数据的函数;视图(模板)是用户最终显示数据和用户界面;控制器(视图函数)负责界面和存储之间的所有工作。
本文是最djanggo开发的一个入门级总结,不涉及太多具体的实现,只为给以后可能开发进行参考。
版本还是比较新的
一:创建工程目录:
进入创建的目录后执行命令
django-admin.py startproject mysite
工程目录下大概有三个文件 setting是全局设置,urls将请求与响应关联起来
二:进入工程文件夹,创建应用! L:\diango\mysite
这里多了管理员admin.py模块,少了书上说的urls.py模块。可能不同的版本有不同的设置,下文将看到因版本问题需要修改很多地方。
四:使用模板HTML
diango模板就是html页面,它包含一些特殊的命令,循环控制语句,甚至函数等,可以动态地创建html。
在模板中将python内容放在{%和%}或者{{和}}之间,位于前者的是程序代码,位于后者的是变量。变量来自模板渲染时
传递给他的上下文。
例如创建一个简单的table表单,名字为index.tmpl,当然也可以使用通用模板就不用自己编写了,下文会讲
1:表单的部分内容如下
<body> {%if totos%} <table border="1"> <tr><td>Todo</td><td>Importance</td></tr> {%for toto in todos %} <tr><td>{{todo.title}}</td> <td>{{todo.importance}}</td></tr> {%endfor%} </table> {%else%} ... </body>
2:编写视图函数views.py
from django.template import Context,loader from django.http import HttpResponse def hello_world(request) todos = [{'title':'A','importance':'1'},//列表字典 {'title':'B','importance':'2'}, {'title':'C','importance':'3'}, {'title':'D','importance':'4'}, ] t =loader.get_template('index.tmpl') c =Context({'todos':todos,}) //上下文 return HttpResponse(t.render(c))
3:修改settings.py让它找到模板
TEMPLATE_DIRS那个目录下加入应用的路径就好,django会在全目录下搜索。
这里使用列表字典导入数据,下边学习从模型中导入数据
五:项目中添加应用:
五:创建模型来添加数据库服务:
1:编写modles类
class Blogpost(models.Model):
title=models.CharField(max_length=150)
body=models.TextField()
timestamp=models.DateTimeField()
可以使用mysql数据库,这里使用自带的SQlite
手动创建文件夹和数据库,并在name中写上。
conn=sqlite3.connect( 'L:\diango\db\mysite.db')
2连接数据库并创建数据库表单
一个错误
简言之:在Django 1.9及未来的版本种使用migrate代替syscdb.
运行这个命令,django会查找 INSTALLED_APPS中列出的所有应用的models.py,为每一个数据模型,创建一个数据库表。并且按照名字创建了一个数据库表
mysite1.db
创建表的工作是django幕后为我们做的
可以用 python manage.py sql blog 命令来查看创建表单时候的esql语句。
六:使用模型
from django.template import Context,loader from django.http import HttpResponse from blog.modles import Blogpost def hello_world(request) todos = Blogpost.object.all().order_by ( 'title') t =loader.get_template('index.tmpl') c =Context({'todos':todos,}) //上下文 return HttpResponse(t.render(c))暂时先写到这里