Django 学习(一)

python3 manage.py runserver [127.0.0.1:8000]

默认 IP 地址和端口号为 127.0.0.1:8000

如果想要让其他电脑连接到服务器,需要手动将 IP 地址指定为 0.0.0.0

0.0.0.0 以我的理解为一个开关,打开后可以接收来自任何 IP 地址的请求

127.0.0.1 为本机地址,他在 Windows 系统内有一个别名,即 localhost,用来描述自身,如果想要让别人连接你,就需要打开 cmd 输入 ipconfig 获取 IP 地址了,如 192.168.0.104


urls.pyurlre_path 的使用等价,其中 url 是 2.0 之前的用法,2.0 之后被 path 代替

通过 from django.conf.urls import url 导入 url

通过 from django.urls import path, re_path 导入 pathre_path

re_path 可以匹配正则表达式


templates 用于存放 .html 文件,与 manage.py 文件处在同一目录,需要在 settings.py 文件中指明路径

import os
TEMPLATES = [
    'DIRS' = [BASE_DIR + '/templates'],
    # 或者
    # 'DIRS' = [os.path.join(BASE_DIR, 'templates')],
    # 'DIRS' = [填绝对路径也行]
]

模板用法

view: {'数据库字段', '数据库字段对应的属性值'}
HTML: {{ 数据库字段 }}

过滤器

{{ 变量名 | 过滤器:可选参数 }}
# 如下
{{ name|safe }}

if/else 标签

{% if condition %}
     ... display
{% endif %}

支持嵌套,如 if...elif...else

支持 in,and,or,not,>,<,==

for 标签

{% for i in listvar %}
    {{ forloop.counter0 }}
{% empty %}
    空空如也~
{% endfor %}

循环为空,即不发生循环将执行 empty

注释标签

{# 这是注释 #}

csrf_token

跨站请求伪造保护,{% csrf_token %} 放在 <form> 标签下一行

首先,向浏览器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,该标签里的 value 属性的值是一个随机的字符串,用户获取到登录页面的同时也获取到了这个隐藏的input标签。

然后,等用户需要用到form表单提交数据的时候,会携带这个 input 标签一起提交给中间件 csrf,原因是 form 表单提交数据时,会包括所有的 input 标签,中间件 csrf 接收到数据时,会判断,这个随机字符串是不是第一次它发给用户的那个,如果是,则数据提交成功,如果不是,则返回403权限错误。


自定义标签和过滤器

  • 在应用目录下创建 templatetags 目录(与 templates 目录同级,目录名只能是 templatetags)。
  • 在此目录下创建任意文件,导入 template
from django import template

register = template.Library()   #register的名字是固定的,不可改变

settings.pyTEMPLATES 节点的 OPTIONS 节点添加 libraries 配置

TEMPLATE = [
    'libraries': 'templatetags.my_tags'
]

利用装饰器 @register.filter 自定义过滤器。注意:装饰器的参数最多只能有 2 个。

利用装饰器 @register.simple_tag 自定义标签。

在使用自定义标签和过滤器前,要在 html 文件 body 的最上方中导入该 py 文件。

{% load my_tags %}

语义化标签在该 py 文件中导入 mark_safe。

from django.utils.safestring import mark_safe

定义标签时,用上 mark_safe 方法,令标签语义化,相当于 jQuery 中的 html() 方法。和前端HTML文件中的过滤器 safe 效果一样。

@register.simple_tag
def my_html(v1, v2):
    temp_html = "<input type='text' id='%s' class='%s' />" %(v1, v2)
    return mark_safe(temp_html)

在HTML中使用该自定义标签,在页面中动态创建标签。

{% my_html "zzz" "xxx" %}

配置静态文件

  1. 在项目根目录下创建 statics 目录。
  2. 在 settings 文件的最下方配置添加以下配置:
STATIC_URL = '/static/' # 别名 
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "statics"), 
]
  1. 在 statics 目录下创建 css 目录,js 目录,images 目录,plugins 目录, 分别放 css文件,js文件,图片,插件。

注意:此时引用路径中的要用配置文件中的别名 static,而不是目录 statics。

在模板中使用需要加入 {% load static %} 代码,{% static "images/runoob-logo.png" %}


模板继承

标签 block...endblock: 父模板中的预留区域,该区域留给子模板填充差异性的内容,不同预留区域名字不能相同。

{% block 名称 %} 
预留给子模板的区域,可以设置设置默认内容
{% endblock 名称 %}

子模板使用标签 extends 继承父模板:

{% extends "父模板路径"%} 

子模板如果没有设置父模板预留区域的内容,则使用在父模板设置的默认内容,当然也可以都不设置,就为空。

子模板设置父模板预留区域的内容:

{ % block 名称 % }
内容 
{% endblock 名称 %}
原文地址:https://www.cnblogs.com/richmanwu/p/13615426.html