一些杂想
一些杂想
Django 笔记
(目前个人认为,Django 还是应该使用 Django1.11版本,稳定长期支持到2020年,兼容性也好。)
Django MTV 构架下的网站开发步骤:
-
使用 virtualenv 创建并启用虚拟机环境。
-
使用
pip install
安装 Django1.11。 -
使用
django-admin startproject
创建项目。 -
使用
python manage.py startapp
创建 app。 -
创建 templates 文件夹,并把所有网页模板(.html)文件都放在此文件夹中。
-
创建 static 文件夹,并把所有静态文件(图像文件、.css 文件以及.js 等)都放在此文件夹中。
-
修改setting.py,把相关文件夹设置都加入,也把生成的 app 名称加入INSTALLED_APPS 序列中。
-
编辑 models.py,创建数据库表格。
-
编辑 views.py, 先 import 在 models.py 中创建的数据模型。
-
编辑 admin.py,把 models.py 中定义的数据模型加入,并使用 admin.site.register 注册新的类,让 admin 界面可以处理数据库内容。
-
编辑views.py, 设计处理数据的相关模块,输入和输出都通过 templates 相关的模块操作获取来自于网页的输入数据,以及显示.html 文件的网页内容。
-
编辑urls.py, 先 iimport 在 views.py 中定义的模块。
-
编辑 urls.py,创建网址和 views.py 中定义的模块的对应关系。
-
执行
python manage.py makemigrations
。 -
执行
python manage.py migrate
。 -
执行
python manage.py runserver
测试网站。
templates 模板的标准步骤:
- 找到使用的模板,如果没有,就建立一个,存放在 templates 文件夹下。
- 在 views.py 的处理函数中查询,计算并准备数据,把要显示在网页上的数据使用字典格式编排好。
- 使用 get_template 函数取得要使用的模板的执行实例 instance,一般会直接命名为 template。
- 通过 template 把变量以字典类型的形式传入,渲染成一个字符串 html。
- 把 html 通过 HTTPResponse 传送给服务器。
在 template 中使用 static 文件
- 在 setting.py 中,设置 STATIC_URL 使用的网址,例如 STATIC_URL=‘/static’,也就是指定在网址中以/static/开头的网址就视为要对静态文件进行读取。
- 在setting.py 中设置 STATICFILES_DIRS,这是设置静态文件真正要存放的文件位置。一般而言都会放在网站目录下的 static 文件夹中,所以都会以os.path.join(BASE_DIR, ‘static’)进行设置。
- 在 template 文件中使用静态文件的专用加载模式。
- forloop.counter()是用来显示当前是第几个循环的一个计数器,forloop.counter()是从0开始计数的,而forloop.counter()是从0开始的。
- 模板中使用
{ % url “account_signup” % }
这样的标签来自动产生相对应的网址。 - 要在网站中建立自定义标签,就要在网站 App 目录下创建一个 templates 文件夹,然后把要创建这些自定义标签的函数放在这个文件夹想,自己命名一个文件,同时为了要让这个文件夹可以被 Python 视为一个可导入的模块,在同一个文件夹下还要创建一个
__init__.py
文件。
使用 models:
- 定义类,参数导入 models.Model,然后就可以使用 models.* 来指定数据表中每一个字段的特征。
- 首次设置 model 的内容要先执行 makemigrations 的指令以及 migrate 指令。执行后系统就会把我们设置的NewTable 数据表建立到数据库中,可以在 setting.py 中修改数据库类型。
- 编辑 models.py 后,一定要再执行migrate 才行(如果中间修改过,就需要先执行 makemigrations )。这两个指令要求套用最新的数据表的新增或修正的内容)即先执行 makemigrations ,再执行 migrate 。
- 通过
python manage.py shell
进入 Python shell 。 - 在Python 3中,数字上不允许使用前导零, 数字前面写0将表示8进制。
- mysite/migrations 的文件夹下有所有做过 makemigrations 的记录,可以很容易地从这些文件的编号中看出变更的顺序以及在每一个阶段中变更的内容。如果有必要,可以直接修改这些内容,然后执行一次
python manage.py makemigrations
和migrate
就可以反映出修改后的数据表结构。当然,如果不小心把所有内容都改乱了,那么把这个文件夹中除了__init__.py
文件外的所有文件都删除,并删除上一层目录中的 db.sqlite3 数据库文件,等于是所有数据库内容全部重置,重新来过了。
站点引用Bootstrap插件的方式有两种:
-
单独引用:使用 Bootstrap 的个别的 *.js 文件。一些插件和 CSS 组件依赖于其他插件。如果您单独引用插件,请先确保弄清这些插件之间的依赖关系。
-
编译(同时)引用:使用 bootstrap.js 或压缩版的 bootstrap.min.js。
-
不要尝试同时引用这两个文件,因为 bootstrap.js 和 bootstrap.min.js 都包含了所有的插件。
-
所有的插件依赖于 jQuery。所以必须在插件文件之前引用 jQuery。
-
使用 bootstrap 建议直接使用 CDN 链接的方式。放在
<head></head>
之间即可。一般是放在</head>
这一行的前面。jQuery 的 CDN 链接代码放在
</body>
之前即可。
提交 post 请求时,会报:禁止访问 (403),CSRF验证失败,请求被中断错误。
这是 Django 为了防范网站 CSRF (Cross-site request forgery,跨站请求伪造) 攻击的机制, 以确保黑客无法伪装为已验证过的浏览器而盗取数据。启用这个功能(默认是启用的)的设置在 setting.py 中的 'django.middleware.csrf.CsrfViewMiddleware'
(在 MIDDLEWARE中的设置区块中)。
我们在加载的 html文件提交表单的
<form>
标签下加上标识符:
{% csrf_token %}
同时在 views.py 文件中定义的函数修改 render 方法,实例如下:
- post请求:
def posting(request): template = get_template('posting.html') moods = models.Mood.objects.all() message = '如果要张贴信息,那么每一个字段都要填...' html = template.render(context=locals(), request=request) return HttpResponse(html)
- get 请求:
def listing(request): template = get_template('listing.html') html = template.render(locals()) return HttpResponse(html)
验证机制
decorator@login_required 是 auth 验证机制提供的一个非常方便的用法,用来告诉 Django 接下来的处理函数内容是需要登录过后才能够浏览的,如果还没有登录就想要执行这一操作,请先登录括号中指定的 login_url 网址。