Django视图和URL松耦合(分开)
模板是一个文本,用于分离文档的表现形式和内容。
进阶技巧:标签(if/else, for, ifequal, ifnotequal, 过滤器)、变量
>>> from django.template import Template, Context
>>> t = Template('Hello, {
{ name }}')
>>> print t.render(Context({'name': 'John'}))
Hello, John
复杂数据结构的遍历关键是句点字符(.)
注意,上述是按顺序进行查找,存在优先级
以上代码中,名为 mainbody 的 block 标签是可以被继承者们替换掉的部分。
所有的 {% block %} 标签告诉模板引擎,子模板可以重载这些部分。
hello.html 中继承 base.html,并替换特定 block
sqlall命令和syncdb命令将Django语句自动生成MySQL语句
验证模型有效性:
python manage.py validate
完成create命令:
python manage.py sqlall books
或者:
python manage.py syncdb
基本数据访问:
python manage.py shell
新建工程
admin.py:管理站点模型的声明文件,默认为空。
apps.py:应用信息定义文件。在其中生成了类Appconfig,类用于定义应用名等Meta数据。
migrations:用于在之后定义引用迁移功能。
models.py:添加模型层数据类的文件。
test.py:测试代码文件。
views.py :定义URL响应函数。
python manage.py makemigrations这个命令是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件例如:0001文件,如果你接下来还要进行改动的话可能生成就是另外一个文件不一定都是0001文件,但是这个命令并没有作用到数据库,这个刚刚我们在上面的操作过程之后已经看到了,而当我们执行python manage.py migrate 命令时 这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性。
另外一个需要注意的是这两个命令默认情况下是作用于全局,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作,如果要想仅仅对部分app进行作用的话 则执行如下命令:
python manage.py makemigrations appname,
python manage.py migrate appname,
如果要想精确到某一个迁移文件则可以使用:
python manage.py migrate appname 文件名
from django.shortcuts import HttpResponse, render, redirect
1.HttpResponse
它是作用是内部传入一个字符串参数,然后发给浏览器。例如:
def index(request):
# 业务逻辑代码
return HttpResponse("OK")
2、render
render方法可接收三个参数,一是request参数,二是待渲染的html模板文件,三是保存具体数据的字典参数。
它的作用就是将数据填充进模板文件(模板路径不用填),最后把结果返回给浏览器。与jinja2类似。例如:
def index(request):
# 业务逻辑代码
return render(request, "index.html", {"name": "monicx", "hobby": ["reading", "blog"]})
3、redirect
接受一个URL参数,表示让浏览器跳转去指定的URL.
例如:
def index(request):
# 业务逻辑代码
return redirect("https://blog.csdn.net/miaoqinian")
{% csrf_token %}的标签
csrf全称是Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST方法提交的表格,必须有此标签。
urlpatterns = patterns('',
# ...
(r'^time/plus/d+/$', hours_ahead),
# ...
)
d+匹配1个以上的数字。如果只允许1个或2个数字,则d{1,2}
在视图函数里用一个offset表现:
def hours_ahead(request, offset):
from django.template import Template, Context
t = Template('{
{ var }} -- {
{ var.upper }} -- {
{ var.isdigit }}')
t = Template('Item 2 is {
{ items.2 }}.')