粗粗看完Tango With Django,对于Django走马观花看了一遍,记录下来方便以后总结使用。
首先
创建工程
django-admin.py startproject testsite001
工程和应用不同,一个工程中可以包含多个应用,默认情况下,启动工程之后,不加前缀的URL都会指向工程的目录,而非应用目录
启动服务
python manage.py runserver 8000
testsite001/urls.py 负责所有URL路由
创建应用
python manage.py startapp <appname>
testsite001/testsite001/views.py 定义主app的显示
settings.py 定义工程设置选项
INSTALLED_APPS 添加后续app
west/urls.py 定义app路由
west/views.py 定义app显示
同一个应用下添加多个URL路由的形式:
urlpatterns = patterns(
'',
url(r'^$', views.index, name='index'),
url(r’about/', views.about, name='about'),
)
views.py中各页面的返回值HttpResponse中,可以直接写html,能够被直接解析。
直接引用模板可以通过views中的页面方法的render方法引用,render方法的第二个参数可以是字典,定义模板中的变量对应的值。
模板中html部分,需要渲染的变量定义形式为:{{ <varNm> }}
Django还支持引用静态媒体,在主工程目录下的settings.py中定义STATIC_URL和STATICFILES_DIRS,定义静态文件的目录,可以直接通过url中的目录结构访问静态文件目录的内容:localhost:8000/static/images/rango.jpg
html文件中引用静态媒体时,需要在DOCTYPE定义之后引入staticfiles,后续的html代码才能够引用静态媒体
<% load staticfiles %>
html中引用static目录下内容:
<img src=“{% static “images/rango.jpg" %}” alt=“Picture of Rango” />
可以用类似方式在页面上引入css和js代码
settings.DATABASES 定义数据库设置,可以设置数据库类型、驱动、用户名、密码、IP以及端口等。
Django通过model定义表结构,model中每一个继承了models.Model的类都是一张表,类中的属性就算表中的列,属性不需要限制为self。定义属性常用的数据类型有:
ChartField(max_length=) 字符串类型、URLField 存储URL,同样有max_length、’IntegerField’ 整数、DateField 存储datetime.date
每个属性都可设置默认值 default=
Django定义了模型/表的连接方式:
ForeignKey 1对多关系的字段类型
OneToOneField 1对1关系字段类型
ManyToManyField 多对多关系字段类型
创建数据库
python manage.py syncdb
设置管理员
python manage.py createsuperuser
更改模型或者表
python manage.py makemigrations
应用更改
python manage.py migrate
新定义的模型需要在管理员界面注册
app/admin.py
admin.site.register(Category)
admin.site.register(Page)
对于已经定义的表结构,可以通过Django在代码中直接操作
from rango.models import Category, Page
Category.objects.all() 返回已经定义的全部Category数据
Page.objects.filter(*args, **kwargs) 返回符合输入条件的Page数据
html页面需要的数据需要在view中的页面方法里定义,通过render传给网页,这只是静态方法,对于ajax,应该还有可以动态渲染的方法。
urls.py中可以利用正则表达式从url中获取需要的参数或其他数据,将获取的数据赋值给指定的变量,可以传递给views中的对应页面方法,通过这种方式完成类似url的复杂映射。
urls.py中:
urlpatterns = […,
url(r'category/(?P<category_name_slug>[w-]+)/$', views.category, name='category'),
]
?P<vari_name> 的形式,将正则捕获的值传递给指定变量,再传给指定的views方法
views.py中:
def category(request, category_name_slug):
...
对应的views方法中,可以通过同名的变量获取urls中捕获的数据。
在URL的正则表达式中如果使用了括号捕获但是没有指定变量,则会按照捕获顺序,作为参数依次传入对应的view方法中去
Django的HTML模板中,引用render变量使用的格式是{{ var_name }},模板控制语句的格式是{% if something %} … {% else %}… {% endif %}
注释格式为{# <a href=“#”>Anchor</a> #}
Django中POST请求不能自动处理url末尾的斜杠,因此对于POST请求的url定义,无论是在模板中还是urls.py中,都需要注意末尾的斜杠互相对应
Django中的表单form django中有form类,在页面上定义了form之后,可以通过指定form对象用于页面渲染的方式,使用form中的数据,或者在页面上定义form标签的action,通过submit方式提交表单内容。
Django中的form支持csrf令牌,可以在一定程度上防止伪造请求。