【Python】从0开始的Django基础

news2024/10/6 6:39:38

Django框架基础

  • unit01
  • 一、`Django`基础
    • 1.1 什么是`Django?`
    • 1.2 安装与卸载
      • 1.2.1 `Python`与`Django`的版本
      • 1.2.2 安装
      • 1.2.3 查看`Django`版本
      • 1.2.4 卸载
  • 二、`Django`项目
    • 2.1 概述
    • 2.2 创建项目
    • 2.3 启动项目
    • 2.4 项目的目录结构
    • 2.5 配置
  • 三、`URL` 调度器
    • 3.2 定义`URL`路由
    • 3.2 定义首页的路由
    • 3.3 便捷管理路由及视图函数
    • 3.4 路径转换器
      • 3.4.1 `int`
      • 3.4.2 `str`
      • 3.4.3 `slug`
      • 3.4.4 `uuid`
      • 3.4.5 `path`
  • 四、模块
    • 4.1 创建模块
    • 4.2 注册模块
    • 4.3 分布式路由
  • unit02
  • 一、`DTL`
    • 1.1 什么是`DTL?`
    • 1.2 模板配置
    • 1.3 `render()`函数
  • 二、`DTL`
    • 2.1 变量
    • 2.2 标签
      • 2.2.1 `for`标签
      • 2.2.2 `if`标签
      • 2.2.3 表单
      • 2.2.4 `csrf_token`
      • 2.2.5 静态资源
        • 2.2.5.1 静态资源的配置
        • 2.2.5.2 访问静态资源
  • unit03
  • 一、`DTL`
    • 1.1 标签
      • `include`标签
      • `cycle`标签
    • 注释
    • 1.2 过滤器
      • `safe`
      • `striptags`
      • `truncatechars`
      • `floatformat`
      • `date`
      • `yesno`
      • `join`
  • 二、`Http`请求
    • 3.1 属性
      • `method`属性
      • `POST`属性
      • `GET`属性
      • 具有浏览框的表单的限制
      • `FILES`属性
    • 3.2 `QueryDict`对象
  • unit04
  • 一、`HTTP`响应
  • 二、模型
    • 2.1 概述
    • 2.2 配置
    • 2.3 创建模型
    • 2.4 数据类型
    • 2.5 数据迁移
  • 三、管理器
    • `all()`方法
    • `get()`方法
  • 四、`QuerySet`
    • `all()`方法
    • `get()`
    • `filter()`
    • `first()`
    • `last()`
    • `order_by()`
    • 查询谓语
    • `F`函数
  • unit05
  • 一、模型
    • `values()`
    • `values_list()`
    • `only()`
    • `query`
    • `Q`函数
    • `exclude()`
    • `count()`
    • `aggregate()`
    • `annotate`
  • unit 06
  • 一、`HttpRequest`对象

unit01

一、Django基础

1.1 什么是Django?

Django是一个基于Python语言的、开源的、重量级的WEB开发框架。

Django适用于开发各类WEB应用程序,包括但不限于电商网站、博客等。

Django的官网:http://www.djangoproject.com

1.2 安装与卸载

1.2.1 PythonDjango的版本

Django 版本Python 版本
3.23.6, 3.7, 3.8, 3.9, 3.10 (在 3.2.9 中就已经加入了)
4.03.8,3.9,3.10
4.13.8,3.9,3.10,3.11(4.1.3 添加)
4.23.8, 3.9, 3.10, 3.11, 3.12 (4.2.8 添加)
5.03.10、3.11、3.12

1.2.2 安装


$ pip3 install django[==version]

1.2.3 查看Django版本


$ python3 -m django --version


$ django-admin --version

1.2.4 卸载


$ pip3 uninstall django

二、Django项目

2.1 概述

Django项目由一个或多个应用程序(指模块)组成,在每个模块中有相对独立的路由、视图、模型、模板等。

2.2 创建项目


$ django-admin startproject projectname

2.3 启动项目

第一步:在命令行输入以下命令:


$ python3 manage.py runserver [[address:]port]

如:


$ python3 manage.py runserver
$ python3 manage.py runserver 8888
$ python3 manage.py runserver 0.0.0.0:8888

第二步:启动浏览器输入地址即可


Pycharm中启动Django项目

第一步:鼠标右击manage.py,然后从弹出的快捷菜单中选择Modify Run Configuration,再在Parameters文本框中输入runserver [[address:]port]

第二步:鼠标右击manage.py,然后从弹出的快捷菜单中选择Run manage

2.4 项目的目录结构


djangoBasic/,项目根目录
├── db.sqlite3,默认的sqlite3数据库文件
├── djangoBasic,内层目录 -- 包
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py,项目配置文件
│   ├── urls.py,根路由文件
│   └── wsgi.py
└── manage.py,入口文件

2.5 配置


# 项目的根目录
BASE_DIR = Path(__file__).resolve().parent.parent

# 是否开启调试模式:在开发环境中需要开启调试模式,在生产环境中需要关闭调试模式
DEBUG = True

# 已安装且启动的应用程序(模块)
INSTALLED_APPS = []

# 已安装且启用的中间件
MIDDLEWARE = []

# 项目的根路由
ROOT_URLCONF = 'djangoBasic.urls'

# 模板(`Templates`)的配置
TEMPLATES = []

# 数据库的配置
DATABASES = {}

# 语言代码
LANGUAGE_CODE = 'zh-Hans'

# 时区
TIME_ZONE = 'Asia/Shanghai'

三、URL 调度器

URL 调度器也称为URL路由,它允许程序员自由的设计URL地址

3.2 定义URL路由

第一步:在根路由文件(urls.py)中定义路由


path(router,view)

URL地址为字母、数字、下划线、短横线的组合

如:


path('hello/',????)

第二步:定义(视图)函数


def function_name(request):
    ...
    ...

如:


def hello(request):
    print('Hello Django')

相对完整的示例代码如下:


# 函数
def hello(request):
    print('Hello,Django')

# 路由
urlpatterns = [
    # ....
    #代表的是当通过 http://127.0.0.1:8000/hello/访问时,将调用hello函数
	path('hello/',hello),
]

运行结果如下:

在这里插入图片描述

此时产生错误的原因是:(视图)函数没有返回响应对象

Django.http包中提供了HttpResponse类,它用于完成Http响应,所以:


from django.http import HttpResponse
# 函数
def hello(request):
    return HttpResponse('Hello,Django')

此时的运行结果如下:

在这里插入图片描述

第三步:通过链接或表单的action来访问相关的路由

此时产生了另外的两个问题:

第一:如果来访问http://127.0.0.1:8000时将产生404 错误 – 怎么解决?

第二:现在在urls.py中既有路由又有视图函数 – 不便于管理 – 如何便捷管理?

3.2 定义首页的路由


path('',视图函数)

示例代码


from django.http import HttpResponse

def index(request):
    return HttpResponse('Index Page')

urlpatterns = [
    # 首页路由
	path('',index),
]    

3.3 便捷管理路由及视图函数

为了便于管理视图函数,强烈建议将视图函数存储到views.py中,然后再在urls.py中引用该模块即可

urls.py的示例代码如下:


from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
    path('hello/', views.hello),
]


views.py的示例代码如下:



from django.http import HttpResponse


def hello(request):
    return HttpResponse('Hello Django')


def index(request):
    return HttpResponse('Index Page')


对于静态的路由可以直接按需要进行定义,但是对于动态的路由,如访问某一个文章时的ID,此时如何定义?

3.4 路径转换器

路径转换器主要解决动态路由的问题,如:


http://127.0.0.1:8000/user/<id>

路径转换器的基本语法:


path("<类型:参数名称>/<类型:参数名称>",视图函数)

需要注意的是:在定义视图函数时,如果路由中存在路径转换器,那么视图函数也必须存在相同名称的参数

3.4.1 int

int类型的路径转换器自动匹配正整数,类型为int,如:


path("users/<int:id>",views.userinfo),

userinfo的函数代码示例如下:


def userinfo(request,id):
    ...
    ....

3.4.2 str

str类型的路径转换器自动匹配字符串,/除外,类型为str,如:


path("topic/<str:topic>/",views.topic),

3.4.3 slug

slug匹配任意由字母、数字、短横线与下划线组成的字符,其类型为str,如:


path('blog/<slug:title>',views.blog),

3.4.4 uuid

UUID的格式为8-4-4-4-12的十六位进制数字组成,其类型为uuid

Pythonuuid模块


import uuid

# 基于当前服务器ID和时间
uuid.uuid1()
# 基于随机数
uuid.uuid4()

3.4.5 path

path 匹配路径,包括/


path('download/<path:path>/',views.download),

组合使用的案例


path('carts/<str:username>/id/<int:id>/',views.carts),

path('<str:username>/<int:id>/',views.goods),

四、模块

每个Django项目至少存在一个模块(应用程序)

4.1 创建模块


$ python3 manage.py startapp app_name

如:


$ python3 manage.py startapp users

$ python3 manage.py startapp goods

4.2 注册模块

将创建的模块名称添加到配置文件的INSTALLED_APPS列表中,如:


INSTALLED_APPS = [
    # ...
    'goods',
    'users',
]

4.3 分布式路由

所谓的分布式路由是将某个模块下以共同字符串开头的路由写在根路由文件中,不同的部分写在模块内部的urls.py中,当访问时系统将自动把两个部分的URL进行拼接。

include()函数位于django.urls模块内,其作用是将当前路由与指定包含文件的路由进行拼接


include("URLS文件")


# urls.py最简陋的样子
from django.urls import path
from . import views

urlpatterns = [
	path('',views.index),
]


# views.py最简陋的样子
def index(request):
    ...
    ...


unit02

一、DTL

1.1 什么是DTL?

DTL(Django Templates Language)Django模板语言,实际上就是将HTML页面与程序代码进行混合的技术。

1.2 模板配置


#模板配置
TEMPLATES = [
    {
        # 模板的引擎
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 配置模板文件的路径
        'DIRS': [BASE_DIR / '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.3 render()函数

render()函数位于django.shortcuts模板内:


from django.shortcuts import render

render()函数的语法结构为:


render(request,template_name,context=None)

request代表的HttpRequest 对象

template_name指要渲染的模板文件路径及名称

context指要传递到模板的数据,其类型必须为dict

二、DTL

模板文件内可以使用:注释、变量、标签等

2.1 变量


# 变量
{{ variable_name }}
# 列表或元组
{{ variable_name.index }}
# 字典
{{ variable_name.key }}
#对象属性
{{ variable_name.property }}
#对象方法
{{ varible_name.method s}}

2.2 标签

标签是指模板中进行逻辑控制的代码,如分支结构、循环结构等,标签的基本语法结构为:


{% 标签名称 %}


或者

{% 开始标签名称 %}
...
...
{% 结束标签名称%}


2.2.1 for标签


{% for variable in iterable %}
 ...
 ...
{% endfor %}


{% for variable in iterable %}
 ...
 ...
{% empty %}
 ...
 ...
{% endfor %}

DTL中为循环提供了在其内部使用的变量:

变量描述
forloop.counter正向循环计数器,从1开始
forloop.counter0正向循环计数器,从0开始
forloop.revcounter反向循环计数器,从1开始
forloop.revcounter0反向循环计数器,从0开始
forloop.first当前循环为第一次循环时为True
forloop.last当前循环为最后一次循环时为True

2.2.2 if标签


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

{% if condition %}
 ...
{% else %}
 ...
{% endif %}

{% if condition %}
 ...
{% elif condition %}
 ...
{% elif condition %}
 ...
{% else %}
 ...
{% endif %}

2.2.3 表单

1.表单的action属性值为空或者省略action属性,代表表单将提交给自身

2.表单的method属性值为空或者省略method属性,代表表单的提交方式为get

2.2.4 csrf_token


{% csrf_token %}

在以post方式提交的表单内必须在使用{% csrf_token %} 产生令牌

当在表单内添加{% csrf_token %}标签后将产生个名称为csrfmiddlewaretoken的隐藏域


<input type="hidden" name="csrfmiddlewaretoken" value="7erwqas">

2.2.5 静态资源

静态资源是网站用于布局的样式文件、图片文件及脚本文件。

2.2.5.1 静态资源的配置

# 静态文件的路由
STATIC_URL = '/static/'

# 静态文件的位置 
STATICFILES_DIRS = [
    BASE_DIR / 'static'
]

2.2.5.2 访问静态资源

第一步:通过{% load static %}标签加载static标签


{% load static %}

第二步:在模板文件中通过static标签来访问静态资源


{% static '静态文件的的路径及名称' %}

被静态文件引用的文件(如在CSS文件内引用图片),因为该静态文件没有经过模板引擎处理,所以不能使用{% static %}标签来加载 – 只能通过其相对路径实现

unit03

一、DTL

1.1 标签

include标签

include标签用于在一个模板文件中包含另外一个模板文件,语法结构为:


{% include '被包含的模板文件的位置及名称' with variable=value variable=value %}

cycle标签

当每次遇到cycle标签时都会产生一个值,第一次产生第一个值,第二个产生第二值,依次类推。当值用尽时,再次遇到该标签时,就产生第一个值。


{% cycle 'value1' 'value2' 'value3' ... %}

注释


{# 这是一个单行注释 #}

{% comment %}
	第一行
    第二行
{% endcomment%}

1.2 过滤器

过滤器用于转换变量或标签参数的值,其基本语法结构为:


{{ 变量名称|过滤器:参数:参数 }}

safe

当通过变量向模板文件传递HTML内容时,在模板中将把HTML内容中的特殊符号进行替换操作,如>替换为&gt;<替换为&lt;

之所以进行替换的原因是为了防止XSS(Cross-site scripting)攻击(译为跨站脚本攻击)。举例说明:

假设在某个网站中对于某条新闻发表了评论,内容如下:

这篇新闻很好
<script>
while(true){
    window.alert("哈哈哈");
}
</script>

当用户发表该评论后,其内容将写入到服务器的数据库 — 不会产生任何问题

但是,如果该评论被某个用户通过浏览器进行访问时,那么其中的


<script>
while(true){
    window.alert("哈哈哈");
}
</script>

将被浏览器认为是JavaScript脚本 - - 并且为死循环!!!

如何解决 – 将输入的><等替换为对于HTML实体,如果此时再有用户输入以下评论:


这篇新闻很好
<script>
while(true){
    window.alert("哈哈哈");
}
</script>

将输入的><等替换为对于HTML实体的结果为:

这篇新闻很好

&lt;script&gt;
while(true){
    window.alert(&quot;哈哈哈&quot;);
}
&lt;/script&gt;

Django模板中如果认为传递到模板的HTML内容为安全内容,则需要通过safe过滤器

striptags

striptags过滤器用于去掉所有的HTML标记

truncatechars

truncatechars过滤器用于截断字符串并且指定长度

floatformat

floatformat过滤器用于对浮点数进行四舍五入

date

date过滤器用于格式化日期和时间

格式描述
Y
m月,带有前导零
d日,带有前导零
H小时,带有前导零
i分钟,带有前导零
s秒,带有前导零

yesno

True,False,None(可选)的值映射到以逗号分隔的字符串

join

join过滤器使用指定的分隔符将列表成员连接成字符串

二、Http请求

当一个url被请求时,Django会自动创建HttpRequest对象,在该对象内包含的请求的元数据,然后再加载相应的视图函数,并且将HttpRequest对象作为视图函数的第一个参数


# 当前request参数代表的就是HttpRequest对象
def function_name(request):
    ...
    ...

HttpRequest对象存在的属性除非另有说明外都是只读属性

3.1 属性

method属性

method属性用于获取HTTP的请求方式,返回结果为英文大写字母


str HttpRequest.method

POST属性

HttpRequest 对象的POST 属性将返回django.http.request.QueryDict的对象,包含HTTP POST提交的数据,其语法结构为:


QueryDict HttpRequest.POST

GET属性

HttpRequest 对象的GET属性将返回django.http.request.QueryDict的对象,包含HTTP GET提交的数据,其语法结构为:


QueryDict HttpRequest.GET

具有浏览框的表单的限制

A.表单的提交方式只能为POST

B.必须设置表单的enctype="multipart/form-data"属性


<form method="post" enctype="multipart/form-data">
    ...
    ...
</form>

FILES属性

FILES属性返回django.utils.datastructures.MultiValueDict对象

对于上传的文件超过2.5MB 将返回TemporaryUploadedFile对象,否则返回InMemoryUploadedFile对象,它们都继承自UploadedFile对象,而UploadedFile继承自File对象,所以可以访问File对象的namesize等属性

3.2 QueryDict对象

QueryDict对象继承自django.utils.datastructures.MultlValuDict对象,MultiValue对象的方法有:

get()用于获取指定key的值,否则返回default


MultiValue.get(key,default=None)

getlist()用于获取指定key的值,否则返回default


list MultiValue.getlist(key,default=None)

keys()返回由键名组成的列表


list MultiValue.keys()

values()返回由键值组成的列表


list MultiValue.value()

items()

dict()返回由键名和键值组成的字典


dict MultiValue.dict()

unit04

一、HTTP响应

每一个视图函数必须存在一个响应对象。

render()函数返回是HttpResponse对象,它的基本原理是将传递的模板文件与字典数据进进行混合后返回一个字符串的结果,该结果带入到HttpResponse对象的参数中。

HttpReponse对象位于django.http模板内


from django.http import HttpResponse

其构造函数的结构为:


HttpResponse(content,content_type='text/html')

其中

content 代表的是响应的字符串信息

content_type 代表的响应的类型,默认为text/html

常用的响应类型有

响应类型说明
text/plain文本
text/htmlHTML
text/cssCSS
text/javascriptapplication/javascriptJS
application/jsonJSON

JsonResponse对象

JsonResponse 对象继承自HttpResponse对象,其作用是返回JSON响应,语法结构为:



#默认情况下,只能为字典对象转换为JSON格式的字符串
#对于非字典数据(列表数据)必须将safe参数设置为False
JsonResponse(data,safe=True)

二、模型

2.1 概述

模型 (Model)是Django为了构建和操纵数据库而提供的抽象层。

模型用于表示和操纵数据表及其记录。

所以首先通过MySQL客户端创建数据库,如:


CREATE DATABASE IF NOT EXISTS knowbase;

SHOW DATABASES;

2.2 配置


DATABASES = {
    'default': {
        # 数据库引擎的类型
        'ENGINE': 'django.db.backends.mysql',
        # MySQL数据库服务器的地址
        'HOST':'127.0.0.1',
        # MySQL数据库服务器的端口号
        'PORT':3306,
        # MySQL数据库服务器用户的用户名
        'USER':'root',
        # MySQL数据库服务器用户的密码
        'PASSWORD':'123456',
        # MySQL数据库服务器的数据库名称
        'NAME': 'knowbase',
    }
}

2.3 创建模型

模型需要在模块下的models.py文件中进行定义,所有的模型都必须继承自django.db.models.Model类,结构如下:


class ClassName(models.Model):
    field_name = models.数据类型([选项[,...]])
    ...
    ...

2.4 数据类型

数据类型描述
CharField(max_length=长度)VARCHAR
SmallIntegerField()SMALLINT
PositiveSmallIntegerField()SMALLINT UNSIGNED
IntegerField()INT
PositiveIntegerField()INT UNSIGNED
BigIntegerField()BIGINT
PositiveBigIntegerField()BIGINT UNSIGNED
BooleanFieldTINYINT(1)
FloatField(max_digits=数字总长度,decimal_places=小数点后的数字长度)FLOAT(M,D)
DecimalField(max_digits=数字总长度,decimal_places=小数点后的数字长度))DOUBLE(M,D)
TextField()LONGTEXT
DateField()DATE
TimeField()TIME
DateTimeField(auto_now_add=是否自动记录创建时间,auto_now=是否自动记录修改时间)DATETIME

2.5 数据迁移

第一步:生成移迁文件


$ python3 manage.py makemigrations

第二步:数据迁移


$ python3 manage.py migrate

add过滤器用于进行字符串的拼接,如


{{ username|add:'ABC'}}
<!--假定username变量的值为Tom,那么拼接完的结果为 TomABC -->

三、管理器

Django的模型中要实现数据表中记录的管理是通过管理器来实现的

Django为每个模型提供了一个名称为objects的管理器,它作为模型的属性进行访问


模型类.objects

如:


from .models import Book

print(type(Book.objects))

all()方法

all()方法用于返回管理器的全部对象,其语法结构为:


QuerySet Manager.all()

get()方法

get()方法用于获取单个对象,如果没有符合条件的记录或者可以查询到多个记录都会产生异常


Object Manager.get(condition[,....])

如果以主键字段进行查找的话,可以写为


Book.objects.get(id=5)
# 或者
Book.objects.get(pk=5)

四、QuerySet

QuerySet称为查询集或者查询结果集,用于表示与管理器相关查询结果。

Queryset可以进行切片、复制及过滤等操作

all()方法

all()方法用于返回结果集中的全部对象,其语法结构为:


QuerySet QuerySet.all()

get()

get()方法用于获取单个对象,如果没有符合条件的记录或者可以查询到多个记录都会产生异常


Object QuerySet.get(condition[,...])

filter()

filter()方法用于根据指定的条件对结果集进行过滤,返回一个新的结果集


QuerySet QuerySet.filter(字段名称__查询谓语=[,...])

first()

first()方法用于返回结果集中的第一条记录


object QuerySet.first()

last()

last()方法用于返回结果集中的最后一条记录


object QuerySet.last()

order_by()

order_by()方法用于对结果集进行排序


QuerySet QuerySet.order_by('字段名称'[,....])

降序排列时,字段名称的写法为-字段名称

查询谓语

  • exact,相等(区分大小写),可以在使用时直接用=进行操作
  • iexact,相等,不区分大小写
  • gt,大于
  • gte,大于等于
  • lt,小于
  • lte,小于等于
  • in,在指定值内,字段名称__in=(value,value,vlaue,..)
  • range,区间范围同,字段名称__range=(min,max)
  • contains,包含指定的字符,区分大小写
  • icontains,包含指定的字符,不区分大小写
  • startswith,以指定字符开头,区分大小写
  • istartswith,以指定字符开头,不区分大小写
  • endswith,以指定字符结尾,区分大小写
  • iendwith,以指定字符结尾,不区分大小写

F函数


from django.db.models import F

在查询时使用到某表内的字段时,必须通过F函数将其引用


Book.objects.filter(sale_price__gte=200+F('cost_price'))

unit05

一、模型

values()

values()方法用于限制返回的字段,可迭代对象为字典


QuerySet QuerySet.values(*fields)

结果样式如:


<QuerySet [{'id': 1}, {'id': 2}]>

values_list()

values_list()方法用于限制返回的字段,可迭代对象为元组


QuerySet QuerySet.values_list(*fields)

结果样式如:


<QuerySet [(1,), (2,)]>

only()

only()方法用于限制返回的字段,可迭代对象为模型实例


QuerySet QuerySet.only(*fields)

结果样式如:


<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]>

query

query属性返回当前查询结果集对应的SQL语句


str QuerySet.query

Q函数

Q函数用于对查询表达式进行连接,然后进行逻辑运算


from django.db.models import Q

exclude()

exclude()方法返回不符合指定条件的记录


Queryset QuerySet.exclude(条件表达式)

count()

count()方法用于获取结果集包含的记录总数


int QuerySet.count()

aggregate()

聚合函数有CountMaxMinSumAvg,位于


from django.db.models import Count,Sum,Avg,Max,Min


dict QuerySet.aggregate(key=Count('field_name'))
dict QuerySet.aggregate(key=Max('field_name'))
dict QuerySet.aggregate(key=Min('field_name'))
dict QuerySet.aggregate(key=Sum('field_name'))
dict QuerySet.aggregate(key=Avg('field_name'))

annotate

aggregate()方法用于对整个Queryset进行聚合操作,而annotate()方法用于对特定的字段进行聚合


Queryset QuerySet.annotate(key=Count('field_name'))
Queryset QuerySet.annotate(key=Max('field_name'))
Queryset QuerySet.annotate(key=Min('field_name'))
Queryset QuerySet.annotate(key=Sum('field_name'))
Queryset QuerySet.annotate(key=Avg('field_name'))

unit 06

一、HttpRequest对象

path属性

path属性用于获取请求URL


str HttpRequest.path

get_full_path()方法

get_full_path()方法用于获取请求URL及查询字符串


str HttpRequest.get_full_path()

redirect() 函数

redirect()函数用于跳转到其他URL


from django.shortcuts import redirect

redirect(to)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型太贵?找找自己的原因好吧?

什么&#xff1f; 炼个大模型还嫌贵&#xff1f; 到底哪里贵了&#xff01;&#xff1f; 大模型算力贵&#xff1f;哪里贵了&#xff01;&#xff1f; 争先恐后训练大模型&#xff0c; 搞得现在“算力慌”“一卡难求”&#xff0c; 算力当然水涨船高了! “特供版”GPU又…

vue中axios从content-disposition响应头获取中文名

在Vue中使用axios请求文件时&#xff0c;服务器可能会返回带有Content-Disposition响应头的文件&#xff0c;其中可能包含文件名的编码信息。如果你需要解码这个文件名&#xff0c;可以使用JavaScript的内置URL API来处理。 Java中用于设置HTTP响应头的&#xff0c;通常在Web开…

js中!emailPattern.test(email) 的test是什么意思

test 是 JavaScript 正则表达式&#xff08;RegExp&#xff09;对象的方法之一&#xff0c;用于测试一个字符串是否与正则表达式匹配。正则表达式是一种用于匹配字符串的模式&#xff0c;通常用于验证输入数据、查找和替换文本等。 使用 test 方法 test 方法语法如下&#xf…

Ubuntu20.04中复现FoundationPose

Ubuntu20.04中复现FoundationPose 文章目录 Ubuntu20.04中复现FoundationPose1.安装cuda和cudnn2.下载相关资源3.环境配置4.运行model-based demo5.运行ycbv demoReference &#x1f680; 非常重要的环境配置 &#x1f680; ubuntu 20.04cuda 11.8.0cudnn v8.9.7python 3.9.19…

3ds MAX 2024版资源包下载分享 3ds Max三维建模软件资源包下载安装

3DSMAX凭借其强大的功能和广泛的应用领域&#xff0c;吸引了无数创作者的青睐。 在游戏制作领域&#xff0c;3DSMAX展现出了无可比拟的优势。从细腻的角色建模到宏大的场景搭建&#xff0c;再到逼真的动画效果和渲染&#xff0c;它都能轻松应对&#xff0c;为游戏世界注入了生动…

Linux服务器上激活conda环境conda: error: argument COMMAND: invalid choice: ‘activate‘

正常我们使用如下来流程&#xff1a; 创建环境&#xff1a;conda create -n 环境名称 激活环境&#xff1a;conda activate 环境名称 但是&#xff0c;在Linux服务器上&#xff0c;使用conda activate 环境名称&#xff0c;出现如上图所示的报错。conda: error: argument CO…

伦敦现货黄金交易市场的历史与地位

英国的伦敦之所以能够成为世界上最大的现货黄金交易市场&#xff0c;当然有着其历史的原因。其实早在1804年&#xff0c;伦敦就取代荷兰阿姆斯特丹交易所&#xff0c;成为了世界黄金交易的中心。1919年伦敦黄金市场正式成立&#xff0c;每天上午和下午的进行两次黄金定价&#…

详细图文手把手教你阿里云注册域名如何托管到CloudFlare DNS服务

1.第一步&#xff1a;注册并登录Cloudflare账号&#xff0c;点击右上角“添加站点”&#xff0c;进入下图页面填写域名&#xff0c;点击继续。 2.第二步&#xff1a;进入页面滑动到最下方&#xff0c;选择Free免费套餐&#xff0c;再次点击继续。 3.第三步&#xff1a;这个页面…

socket--IP端口爆破域名解析

免责声明:本文仅做技术交流与学习... 目录 IP端口爆破 域名解析爆破 IP端口爆破 #端口扫描: #获取扫描的 IP和端口 #连接 IP和端口&#xff08;socket&#xff09; #判断连接状态-开放和关闭# import socket # # 加入参数模式 # import os # ssocket.socket() # s.connect((…

HarmonyOS NEXT首个公测Beta版封包完成

华为将在6月21日至23日在深圳举办华为开发者大会2024。 根据华为消费者业务CEO余承东此前的预告&#xff0c;HarmonyOS NEXT将在大会上正式推出Beta版本&#xff0c;用户将有机会体验全新的鸿蒙系统。 HarmonyOS NEXT首个公测Beta版封包完成&#xff1a;Mate 60和Pura 70系列即…

【干货】分享系统源码,总有一个你想要的(Java、Python、Android、C#、Vue等)

目录 即时通讯管理系统&#xff08;JavaSpringBootvueelementui&#xff09;在线考试系统&#xff08;JavaSpringBootVue&#xff09;JavaSpringBootVue实现猜灯谜答题抽奖系统JavaSpringSpring MVCMyBatis实现图书管理系统基于SpringBootMySQLGuavaRedisRabbitMQ实现高并发商品…

Playwright鼠标悬浮元素定位方法

优点&#xff1a;你把鼠标点烂&#xff0c;把它从20楼丢下去&#xff0c;元素定位就在那&#xff0c;他不动&#xff0c;我说的偶像&#xff01; F12打开浏览器的调试页面 点击源代码Sources 右侧找到事件监听器断点&#xff08;Event Listener breakpoints&#xff09;&#…

防止暴力破解,教你如何在登录失败后实施10分钟账户锁定策略!

最近&#xff0c;在服务器上发现了异常的登录尝试。尽管您的团队已经采取了强密码策略和其他安全措施来加固服务器&#xff0c;但恶意程序仍然通过暴力破解的方式试图多次尝试猜测正确的凭据以获取访问权限。为了增强系统的安全性&#xff0c;特别是防止此类暴力破解攻击&#…

LeetCode esay mid 记录

1486. 数组异或操作 感觉一般也用不到 emmm 灵茶山艾府传送门 推导过程可以结合官网部分观看 重点由两部分的结合 将特定部分转换为常见部分 0到n的异或和表示 2595. 奇偶位数 0x555是十六进制数&#xff0c;转换为二进制为 0101 0101 0101 class Solution {public int[…

随时随地,开启你的短剧之旅——小程序系统大揭秘

在快节奏的现代生活中&#xff0c;短小精悍、情节紧凑的短剧成为了人们消遣碎片时间的新宠。短剧小程序系统应运而生&#xff0c;旨在满足这种新兴的娱乐消费需求。该系统不仅为观众提供了便捷的观剧方式&#xff0c;还为创作者和品牌搭建了一个全新的展示平台。接下来&#xf…

白酒:茅台镇白酒的酒厂社会责任与可持续发展

云仓酒庄豪迈白酒&#xff0c;作为茅台镇的品牌&#xff0c;不仅在产品品质和口感方面有着卓着的表现&#xff0c;在酒厂社会责任和可持续发展方面也做出了积极的探索和实践。 首先&#xff0c;云仓酒庄豪迈白酒注重环境保护和资源利用。酒厂在生产过程中严格控制能源消耗和排放…

操作系统 - 进程的控制(创建与终止)

进程控制 文章目录 进程控制进程创建进程的终止wait()和waitpd()僵尸进程孤儿进程 进程创建 程序在执行的过程中&#xff0c;可能会创建多个进程&#xff0c;创建进程称为父进程&#xff0c;新的进程称为子进程&#xff0c;每个新的进程也可以创建其他进程&#xff0c;从而形成…

警惕!ELSEVIER旗下1本双1区TOP被On Hold !请大家谨慎投稿

【SciencePub学术】又1本&#xff01;双1区TOP刊被On Hold &#xff01;官方现在对期刊质量的管控越来越严格了&#xff0c;被标记为On Hold后的期刊中&#xff0c;大部分的命运也是被WOS数据库剔除&#xff01;所以请大家谨慎投稿&#xff01; 《Information Sciences》作为一…

研发管理平台有哪些?符合软件公司需求的工具要具备这几个特征!

本人从事TOB行业十余年&#xff0c;目前就职的就是一家软件公司。下面&#xff0c;本人就站在软件公司的角度来讲一讲&#xff1a;我们公司做项目研发时&#xff0c;会选择一个什么样的研发管理工具来辅助&#xff1f;供大家参考。 众所周知&#xff0c;软件研发项目是一个复杂…

git复制他人的远程仓库到自己的远程仓库

使用 git clone <远程仓库链接> 克隆你需要的远程仓库到本地仓 然后在本地仓里找到配置文件 修改配置文件里面配置 使用 git push -u origin master 上传本地仓文件到自己的远程仓库