python框架django文档_Django基础——Django框架介绍及模板语言
Django框架,我們只需要關心二點:
1.根據用戶訪問不同的路徑執行不同的函數
2.從HTML讀取出內容,并且完成字符串的替換
而socket通信不需要我們自己寫;
新建Django項目
命令行創建:
django-admin startproject mysite
pycharm創建:
1. File --> New project --> 左側選Django --> 右側填第二個項目路徑,并且勾選python.exe
設置Django項目:
1. settings.py
1. 配置HTML文件存放的位置(Templates)
2. 配置靜態文件(CSS/JS/圖片)存放的位置
3. 注釋掉setting.py中 帶有 csrf 的那一行。
Django項目的啟動:
1. 命令行啟動
在項目的根目錄下(也就是有manage.py的那個目錄),運行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口啟動
python3 manage.py runserver 端口 --> 在指定的端口啟動
python3 manage.py runserver --> 默認在本機的8000端口啟動
2.PyCharm啟動
點綠色的小三角,直接可以啟動Django項目(前提是小三角左邊是你的Django項目名)
MVC是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等優點;
MVC中的控制器可以看做是Django中的urls.py和views.py(不同路徑對應的不同的函數,并且執行函數);視圖可以看做是templates(存放html文件的);模型相當于models.py(在數據庫中生產表的)
而Django框架的設計模式借鑒了MVC框架的思想,也是分成三部分,來降低各個部分之間的耦合性。Django框架的不同之處在于它拆分的三部分為:Model(模型)、Template(模板)和View(視圖),也就是MTV框架。
如下圖:
Django中的APP:
什么是APP?以及為什么要用APP?
project --> 項目 (學校)
APP --> 應用 (Linux學院/Python學院/大數據學院/Java學院)
用APP就是為了方便 我們在一個大的Django項目中,管理實現不同的業務功能.
創建app
python3 manage.py startapp my_app
Django生命周期的流程圖:
Django模板系統(詳細點我)
模板系統本質上就是(在html文件中進行字符串替換);
語法:
{{ 變量 }} ;{% %}則是邏輯相關用的;
1. 變量相關: {{ name }},{{name|length}},{{name|default:"默認值"}}
在Django的模板語言中,通過使用?過濾器?來改變變量的顯示。
過濾器的語法: {{ value|filter_name:參數 }}
使用管道符"|"來表示過濾器(filters)。
下面是內置的過濾器:
1.default :
如果一個變量是false或者為空,使用給定的默認值。 否則,使用變量的值。
2.length:
返回值的長度,作用于字符串和列表。
3.filesizeformat:
將值格式化為一個 “人類可讀的” 文件尺寸 (例如?'13 KB',?'4.1 MB',?'102 bytes', 等等)
4.slice
切片
date
日期格式化
{#{{ JS_html|safe }}#}
{{ JS_html }}
{{ name }}
{{ now|date:"Y-m-d H:i:s" }}
{{ text }}
{{ text|truncatechars:18 }}
文件大小:{{ size|filesizeformat }}
5. safe --> XSS攻擊(跨站腳本攻擊)
Django的模板中會對HTML標簽和JS等語法標簽進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,用戶輸入的信息如果是js的話,進行自動的轉義后網站有可能會受到攻擊。因此把js的語法標簽 轉為字符串了;如果告訴Django這個代碼是安全的,就會自動轉義為相應內容;但是不告訴,則會轉變為字符串;
value = "點我"
{{ value|safe}}
6. truncatechars:20 --> 截取字符,超過的用...表示
如果字符串字符多于指定的字符數量,那么會被截斷。截斷的字符串將以可翻譯的省略號序列(“...”)結尾。
參數:截斷的字符數
{{ value|truncatechars:9}}
自定義的filter
1. 定義階段
1. 在app下面新建一個python的包:templatetags
2. 在上面的Python包中新建一個Python文件,名字隨意
3. 在上述python文件中:
from django import template
# 生成一個注冊用的實例
register = template.Library()
# 定義并注冊一個自定義的filter函數
@register.filter(name='addsb')
def add_sb(arg):
return "{} sb".format(arg)
from django import template
register = template.Library()
# 自定義filter函數方法
# 告訴Django的模板語言我現在有一個自定義的filter方法名
@register.filter(name="addstr")
def add_str(arg,arg2): #自定義的filter 函數的 方法 只能有 兩個參數;
"""
:param arg: 第一個參數永遠是管道符(|)前面的變量
:param agr2: 方法:變量;冒號后面的變量
:return:
"""
return "{},{}".format(arg,arg2)
自定的filter函數只能傳入一個變量(就是冒號后面的變量) ;
而simple_tage 可以傳入多個值;inclusion_tag可以返回一段html的代碼(比如返回url標簽)
如下:
#simple_tag 指定的方法可以傳入多個值
@register.simple_tag(name="add_sum")
def add_sum(arg,arg1,arg2,arg3):
return "{}+{}+{}+{}".format(arg,arg1,arg2,arg3)
# inclusion_tag 自動的幫 你把函數的返回值 替換到你指定的html里面,
# 然后把結果最后的返回給調用函數的地方;
@register.inclusion_tag("incolusion_demo.html")
def show_results(n):
n=1 if n<1 else int(n)
data = ["第{}次".format(i) for i in range(1,n+1)]
return {"data":data}
2. 調用階段:
1. 在Django的模板文件中,導入剛才新建的python文件
{% load py文件名 %}
2. 按照filter的語法調用
{{ name|addsb }}
{#在調用自己寫的方法的時候需要用load調用app里面的templatetags里面的文件#}
{% load myfilter %}
{{ name|addstr:"張映雪" }}
{% load my_simple_tag %}
{% add_sum "張映雪" "張映雪" "張映雪" "張映雪" %}
{% show_results 5 %}
2. 邏輯相關:
1. if判斷
{% if a > b %}
{% endif %}
{% if a > b %}
{% else %}
{% endif %}
{% if a > b %}
{% elif %}
{% else %}
{% endif %}
2. for循環
1. for循環的基本用法:
{% for i in name_list %}
{{ i }}
{% endfor %}
{% for i in name_list %}
{{ i }}
{% empty %} #如果沒有數據 則會執行empty后面的語句
空空如也
{% endfor %}
2. for循環可用的屬性:
forloop.counter (從1開始計數)
forloop.counter0(從0開始計數)
forloop.revcounter(從1反向計數)
forloop.revcounter0(從0反向計數)
forloop.first? ? ? 當前循環是不是第一次循環
forloop.last 當前循環是不是最后一次循環
這兩個返回pool值
forloop.parentloop --> 兩層for循環,內層循環引用外層循環
模板中支持的寫法:
{# 取l中的第一個參數 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取對象的name屬性 #}
{{ person_list.0.name }}
{# .操作只能調用不帶參數的方法,并且方法后面不需要() #}
{{ person_list.0.dream }}
1. 母版和繼承
1. 為什么要有模板和繼承:
把多個頁面公用的部分提取出來,放在一個 母版 里面。
其他的頁面只需要 繼承 母版就可以了。這樣方便;
2. 具體使用的步驟:
1. 把公用的HTML部分提取出來,放到base.html文件中
2. 在base.html中,通過定義block,把每個頁面不同的部分區分出來
3. 在具體的頁面中,先繼承母版{% extends "base.html(母版的html)" %}
4. 然后block名去指定替換母版中相應的位置
母版(框架):
{# 下面是用來替換的 #}
{% block page_content %}
{% endblock %}
繼承母版的新的html
{#繼承母版#}
{% extends "base.html" %}
{#把自己的頁面內容 放入到母版里面的blck的位置里面#}
{% block page_content %}
{# 里面就是所替換的內容#}
{% endblock %}
{% block book_active %}
active
{% endblock %}
3. 使用母版和繼承的注意事項:
1. {% extends 'base.html' %} --> 母版文件:base.html要加引號
2. {% extends 'base.html' %}必須放在子頁面的第一行!!!
3. 可以在base.html中定義很多block,通常我們會額外定義page-css和page-js兩個塊
{% block page_css %}
{% endblock %}
{% block page_js %}
{% endblock %}
4. view.py相應的函數中返回的是對應的子頁面文件 不是 base.html
組件:
可以將常用的頁面內容如導航條,頁尾信息等組件保存在單獨的文件中,然后在需要使用的地方按如下語法導入即可。
{% include 'navbar.html' %}
靜態文件相關的
{% load static %}
某個文件多處被用到可以存為一個變量
{% load static %}
{% static "images/hi.jpg" as myphoto %}
{% load static %}
總結
以上是生活随笔為你收集整理的python框架django文档_Django基础——Django框架介绍及模板语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python正十三边形_一起学pytho
- 下一篇: pythontemp_python 临时