Django-- (二) Django快速上手

本文详细介绍了Django的路由配置,包括基本路径和正则表达式路径的使用,并展示了视图函数如何处理请求。同时,文章讲解了Django模板的使用,包括创建模板目录、模板语法以及模板过滤器的创建和应用。此外,还提到了静态文件的管理和加载,以及模板的加载和继承机制。
摘要由CSDN通过智能技术生成

1、Django路由

基本格式:

path(“字符串”,要执行任务的视图)
re_path(“正则表达式”,要执行任务的视图)

正则回顾:

字符描述
^匹配输入字符串的开始位置
$匹配输入字符串的结尾位置。
.匹配除换行符 \n 之外的任何单字符
\d匹配一个数字字符。等价于 [0-9]。
\D匹配一个非数字字符。等价于 [^0-9]。
\w匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
\W匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。
[xyz]字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
|指明两项之间的一个选择
()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用
*匹配前面的子表达式零次或多次
+匹配前面的子表达式一次或多次
?匹配前面的子表达式零次或一次
{n}n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
# urls.py
from django.contrib import admin
from django.urls import path, re_path
from project1.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('laowang/', hello),
    re_path(r'laowang/(?P<id>\w+)', re),  # 若是指定了名称,视图必须使用指定的名称才能获取数据,没有指定视图则可随意指定名字获取
    re_path(r'b/(\d{4})/(\d{2}|\d{1})/(\d{2}|\d{1})', re_day),  # 分组匹配获取
]
# views.py
from django.shortcuts import HttpResponse, render


def hello(request):
    return HttpResponse("hello")


def re(request, id):  # 获取指定名称的数据
    return HttpResponse(id)


def re_day(request, year, month, day):
    return HttpResponse(f"{year},{month},{day}")

2、Django模板

2.1 模板的使用

1、settings中的BASE_DIR是项目的根目录

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

2、创建templates目录

3、修改settings中templates的路径

# views.py
def index(request):
    name = "老王"
    return render(request, "index.html", locals())
from project1.views import index

# urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path("index/", index),
]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<hr>
    {{ name }}
</body>
</html>

2.2 模板语法

Django的模板语法和flask类似

# views.py

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show(self):
        return self.name

    def show2(self, info):
        return info


def index(request):
    """首页"""
    name = "老王"
    age = 18
    hobby = ["敲门", "洗脚", "烫头发"]
    address = {"province": "广东省", "city": "广州市"}
    person = Person("老王", 33)

    person_list = [
    ]
    person_list2 = [
        {"id": 1234, "name": "老王1", "age": 33},
        {"id": 12, "name": "老王2", "age": 33},
        {"id": 333, "name": "老王3", "age": 33},
        {"id": 5555, "name": "老王4", "age": 33},
        {"id": 5, "name": "老王5", "age": 33}
    ]

    msg = "<h1 style='color:red'>我是隔壁的老王</h1>"
    msg2 = "i AM chinese"

    return render(request, "index.html", locals())
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<hr>
{{ name }}  {#变量的使用#}

<hr>
{{ hobby.1 }}  {#列表数据的获取,根据索引获取,不能用[0]的方式获取#}

<hr>
{{ address.city }}  {#字典数据的获取,不能用["city"]的形式获取#}

<hr>
{{ person.name }}  {#对象数据的获取#}

<hr>
{{ person.show }}  {#对象方法的调用#}

<hr>
{# if判断 #}
{% if age >= 18 %}
    成年了
{% elif age < 18 %}
    未成年
{% endif %}

<hr>
{# 判断是否相等 #}
{% ifequal age 18 %}
    我18岁了
{% endifequal %}

<hr>
{# 循环的特殊变量,forloop #}
{% for i in hobby %}
    {% if forloop.first %}
        <p>第一次循环</p>
    {% endif %}
    <p>{{ forloop.counter }},{{ forloop.counter0 }},{{ i }}</p>
    {% if forloop.last %}
        <p>最后一次循环</p>
    {% endif %}
{% endfor %}

<hr>
{% for person in person_list %}
    {{ person }}
{% empty %}  {# 判断是否为空 #}
    没有数据
{% endfor %}

<hr>
{% autoescape on %}  {# 是否执行源代码 #}
    {{ msg }}
{% endautoescape %}
<hr>
{% autoescape off %}
    {{ msg }}
{% endautoescape %}

<hr>
{{ msg|safe }}  {# safe过滤器 #}

<hr>
{{ msg2 | upper }}  {# lower等过滤器 #}

<hr>
{% for person in person_list %}
    {% if forloop.counter|divisibleby:2 %}  {# 是否整除2 #}
        <tr>
    {% else %}
        <tr style="background-color: red; color: white">
    {% endif %}
    <td>{{ forloop.counter }}</td>
    <td>{{ person.name }}</td>
    <td>{{ person.age }}</td>
    </tr>
{% empty %}
    没有数据
{% endfor %}
</body>
</html>

3、过滤器

过滤器是对数据进行过滤处理的方法。

1、创建templatetags包

名字是固定的,不能随意改动

2、 在templatetags包里创建文件,用来存放过滤器函数,文件名字可以任意。

3、编写过滤器函数

from django.template import Library

register = Library()  # 实例化模板库


@register.filter  # 用来注册过过滤器的装饰器
def phone_filter(phone):
    """接收并返回过滤的结果函数"""
    result = phone[:3]+"***"+phone[-4:]  # 对号码进行处理
    return result  # 返回过滤结果

4、使用过滤器

{% load  buyer_filter %}  <!-- 加载过滤器 -->

<p class="text-center">{% phone|phone_filter %}</p>  <!-- 使用phone_filter过滤器 -->

4、静态文件

1、 在项目目录下创建静态文件目录

2、修改配置信息

3、加载静态文件

静态文件的加载有两种方式

方式1:

<img src="/static/img/user.jpg">

方式2:

{% load static %}

<img src="{% static '/img/user.jpg' %}">

方式2是加载设置里面的STATIC_URL,根据STATIC_URL拼接静态文件地址。

5、模板的加载和继承

模板的加载和继承和flask一样

5.1 加载
{% include "a.html" %}
5.2 继承
{% extends "a.html" %}
5.3 修改个性部分
<!--a.html-->
{% block label %}
    <h1>神奇宝贝</h1>
{% endblock %}
<!--子模板-->
{% extends "a.html" %}  <!-- 基础1.html的公共部分 -->

{% block label %}  <!-- 修改个性部分,若子模板不修改,则继承父模板内容 -->
    <h1>皮卡丘</h1>
{% endblock %}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值