官网

 https://www.djangoproject.com/download/

安装django

pip安装django

# 查看python版本,版本显示如下Python 3.12.1
python3 -V
# 安装django
python3 -m pip install Django==5.0.6
# 查看django版本
python3 -m django --version
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Python之Web框架Django_html

通过Django包离线安装

 下载Django项目并解压

Python之Web框架Django_django_02


进入 Django 目录,执行 python3 setup.py install,然后开始安装,Django 将要被安装到 Python 的 Lib下site-packages。

python3 setup.py install
  • 1.

Python之Web框架Django_django_03


安装成功后python的lib下面的django文件

Python之Web框架Django_python_04

检查是否安装成功

import django
django.get_version()
  • 1.
  • 2.

Python之Web框架Django_django_05

创建项目

# 通过django-admin startproject命令创建项目
django-admin startproject testdj
cd testdj # 切换到创建的项目
#运行项目
python3 manage.py runserver
#0.0.0.0让其它电脑可连接到开发服务器,8000为端口号。如果不说明,端口号默认为8000。
python3 manage.py runserver 0.0.0.0:8000
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Python之Web框架Django_python_06


浏览器访问http://127.0.0.1:8000/

Python之Web框架Django_python_07


查看项目的结构

Python之Web框架Django_django_08

创建登陆账号

python3 manage.py createsuperuser
  • 1.

Python之Web框架Django_django_09


 http://127.0.0.1:8000/admin/ ,打开此网页登陆账号

Python之Web框架Django_python_10

接口及URL映射配置

新建一个views.py文件

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world ! ")
  • 1.
  • 2.
  • 3.
  • 4.

Python之Web框架Django_django_11


打开 urls.py 文件,绑定 URL 与视图函数。

path('hello/', views.hello)
  • 1.

Python之Web框架Django_django_12

template模版

settings.py设置模板文件夹位置

修改settings.py文件,TEMPLATES的 DIRS 为 [os.path.join(BASE_DIR, 'templates')]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],       # 模版位置,根目录下的templates
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

Python之Web框架Django_python_13

index.html

在根目录的templates文件夹下新建index.html文件

<h1>{{ hello }}</h1>
  • 1.

Python之Web框架Django_python_14

接口返回渲染的界面
from django.http import HttpResponse
from django.shortcuts import render

def hello(request):
    return HttpResponse("Hello world ! ")

# 渲用模版染index.html
def helloTemplate(request):
    context = {}
    context['hello'] = 'Hello World!'
    return render(request, 'index.html', context)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
path('helloTemp/', views.helloTemplate)
  • 1.
测试

 http://127.0.0.1:8000/helloTemp/

Python之Web框架Django_html_15

模版进阶

接口渲染变量,列表,字典三种数据类型

from django.http import HttpResponse
from django.shortcuts import render

def hello(request):
    return HttpResponse("Hello world ! ")

# 渲用模版染index.html
def helloTemplate(request):
    # 定义字典,因为render的第三个参数事通过字典的键值对来渲染html界面的
    context = {}

    #渲染变量
    context['hello'] = 'Hello World!'
    # 渲染列表
    context['hello_list'] = ["葬送的芙莉莲","辛尔美","菲伦"]
    # 渲染字典
    context['hello_dict'] = {"name":"芙莉莲","age":1000}
    # 等同于return render(request,"index.html", {"hello":'Hello World!'})
    return render(request, 'index.html', context)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

html

<h1>{{ hello }}</h1>

<!-- 取出整个列表 -->
<p>{{ hello_list }}</p>  
<!-- 取出列表的第一个元素  -->
<p>{{ hello_list.0 }}</p>

<!-- 取整个字典 -->
<p>{{ hello_dict }}</p>
<!-- 取字典的某个key的值 -->
<p>{{ hello_dict.name }}</p>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
过滤器
<!-- 语法 -->
{{ 变量名 | 过滤器:可选参数 }}
<!-- 过滤器 lower 处理后,转换为小写 -->
{{ name|lower }}
<!-- 第一个元素并将其转化为大写;过滤管道可以被套接,一个过滤器管道的输出又可以作为下一个管道的输入 -->
{{ my_list|first|upper }}
<!-- 显示变量 bio 的前30个词 -->
{{ bio|truncatewords:"30" }}
<!-- 添加反斜杠到任何反斜杠、单引号或者双引号前面 -->
{{ name|addslashes }}
<!--  按指定的格式字符串参数格式化 date 或者 datetime 对象 -->
{{ time|date:"Y-m-d" }}
<!-- default 为变量提供一个默认值 -->
{{ name|default:"这是默认值" }}
<!-- 返回对象的长度,适用于字符串和列表。字典返回的是键值对的数量,集合返回的是去重后的长度 -->
{{ name|length}}
<!-- safe将字符串标记为安全,不需要转义。返回的url为超链接时使用 -->
{{ views_str|safe }}

<!-- 选择结构 -->
{%if num > 90 and num <= 100 %}
    优秀
{% elif num > 60 and num <= 90 %}
    合格
{% else %}
    去玩吧~
{% endif %}

<!-- ifequal/ifnotequal 标签 -->
{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

<!-- 循环结构 ,后面加reversed代表反向迭代
在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号。
forloop.counter: 顺序获取循环序号,从 1 开始计算
forloop.counter0: 顺序获取循环序号,从 0 开始计算
forloop.revcounter: 倒序获取循环序号,结尾序号为 1
forloop.revcounter0: 倒序获取循环序号,结尾序号为 0
forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False 
-->
{% for item in views_list %}
    {{ item }}
    {{ forloop.counter }}
    {{ forloop.counter0 }}
    {{ forloop.revcounter }}
    {{ forloop.revcounter0 }}
    {{ forloop.first }}
    {{ forloop.last }}
{% endfor %}

<!-- 遍历字典 -->
{% for key,val in views_dict.items %}
    {{ key }}---{{ val }}
{% endfor %}

<!-- 可选的 {% empty %} 从句:在循环为空的时候执行(即 in 后面的参数布尔值为 False )。 -->
{% for i in listvar %}
    {{ forloop.counter0 }}
{% empty %}
    空空如也~
{% endfor %}

<!-- Django 注释使用 {# #} -->
{# 这是一个注释 #}

<!-- {% include %} 标签允许在模板中包含其它的模板的内容 -->
{% include "nav.html" %}

<!-- csrf_token 用于form表单中,作用是跨站请求伪造保护。
如果不用 {% csrf_token %} 标签,在用 form 表单时,要再次跳转页面会报 403 权限错误。
用了{% csrf_token %} 标签,在 form 表单提交数据时,才会成功。 -->
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
自定义标签和过滤器

在 templatetags 目录下创建my_tags.py文件

from django import template
from django.utils.safestring import mark_safe

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

# 用装饰器 @register.filter 自定义过滤器,装饰器的参数最多只能有 2 个
@register.filter
def my_filter(v1, v2):
    return v1 * v2

# 用装饰器 @register.simple_tag 自定义标签
@register.simple_tag
def my_tag1(v1, v2, v3):
    return v1 * v2 * v3

# 定义标签时,用上 mark_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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

Python之Web框架Django_django_16


index.html中使用

<!-- 自定义过滤器 -->
{{ 11|my_filter:22 }}

<!-- 自定义标签 -->
{% my_tag1 11 22 33 %}

<!-- HTML中使用自定义标签,在页面中动态创建标签 -->
{% my_html "zzz" "xxx" %}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

Python之Web框架Django_django_17

如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ ~

Python之Web框架Django_html_18