龙空技术网

Django学习笔记2023-6-18

不易9093 67

前言:

此时姐妹们对“django使用session”都比较重视,同学们都想要知道一些“django使用session”的相关文章。那么小编同时在网摘上网罗了一些对于“django使用session””的相关文章,希望朋友们能喜欢,姐妹们一起来了解一下吧!

一、Django 实用程序

Django官方网站提供了一些实用的工具和函数,这些工具和函数可以帮助开发人员更轻松地编写Django应用程序。以下是该页面上列出的一些工具和函数:

django.utils.crypto:提供加密和解密功能。django.utils.datastructures:提供数据结构,如有序字典、列表等。django.utils.functional:提供高阶函数,如map、reduce等。django.utils.http:提供HTTP相关的工具,如cookie处理、session管理等。django.utils.log:提供日志记录功能。django.utils.text:提供文本处理功能,如字符串格式化、翻译等。django.utils.translation:提供国际化支持。django.utils.validation:提供表单验证功能。django.utils.version:提供版本控制功能。

根据页面内容,我理解这些工具和函数都是为了帮助开发人员更方便地编写Django应用程序而提供的。例如,使用django.utils.crypto可以对密码进行加密和解密,这对于保护用户密码非常有用;使用django.utils.datastructures可以方便地创建有序字典和列表等数据结构;使用django.utils.functional可以方便地实现高阶函数,如map、reduce等;使用django.utils.http可以方便地处理HTTP请求和响应;使用django.utils.log可以方便地记录应用程序的日志信息;使用django.utils.text可以方便地进行字符串格式化和翻译等操作;使用django.utils.translation可以方便地实现多语言支持;使用django.utils.validation可以方便地进行表单验证;使用django.utils.version可以方便地管理应用程序的版本信息。

下面是一个样例代码,展示了如何使用django.utils.crypto中的make_password()函数对密码进行加密和解密:

from django.contrib.auth import get_user_modelfrom django.utils.crypto import make_passwordfrom myapp.models import User# 获取用户模型User = get_user_model()# 创建一个新用户new_user = User(username='testuser', password=make_password('mypassword'))new_user.save()# 获取已保存的用户对象saved_user = User.objects.get(username='testuser')# 对密码进行加密和解密encrypted_password = make_password('mypassword')decrypted_password = make_password(encrypted_password)print(f"Encrypted password: {encrypted_password}")print(f"Decrypted password: {decrypted_password}")

Django Utils 是一组实用工具,这些工具不属于 Django 核心功能但是可以帮助开发者更加高效地开发 Django 应用程序。

django.utils.module_loading

一个模块,提供了一系列用于加载 Python 模块的实用函数。

django.utils.module_loading.import_module(package_name)

加载指定名称的模块并返回其顶层命名空间。如果模块是一个包,则返回包的init.py模块的命名空间。

参数:package_name: 要导入的模块或包的名称,可以是字符串或模块对象。示例:

from django.utils.module_loading import import_module# 导入模块module = import_module('django.utils')print(module)# 导入包package = import_module('django')print(package.utils)
django.utils.module_loading.module_has_submodule(package, module_name)

检查一个包中是否存在指定的模块。

参数:package: 包名或包对象。module_name: 待检查的模块名。示例:

from django.utils.module_loading import module_has_submodule# 检查django.utils是否有一个名为module_loading的模块has_module = module_has_submodule('django.utils', 'module_loading')print(has_module)
django.utils.module_loading.autodiscover_modules(module_name, register_to=None, fail_silently=False)

在指定的模块中发现所有符合特定命名模式的模块,并在给定的 register_to 目录中注册它们。如果未提供 register_to,则将使用默认注册表。如果未找到任何模块,则该函数将安静地返回。

参数:module_name: 包含模块的模块的名称。register_to: 一个可选的注册表,将模块注册到该注册表中。fail_silently: 如果为 True,则不会引发任何异常。示例:

from django.utils.module_loading import autodiscover_modules# 在myapp应用程序中发现所有名为admin.py的模块,并将它们注册到django.contrib.admin.autodiscover_modulesautodiscover_modules('admin', register_to='django.contrib.admin.autodiscover_modules')
django.utils.functional

一个模块,提供了一些实用函数和类,用于处理函数式编程的一些常见模式。

django.utils.functional.curry(func, *args, **kwargs)

返回一个新函数,该函数是原始函数的柯里化版本。

参数:func: 待柯里化的函数。args: 位置参数,这些参数将在调用返回的函数时传递给原始函数。kwargs: 关键字参数,这些参数将在调用返回的函数时传递给原始函数。示例:

from django.utils.functional import curry# 原始函数def add(x, y):    return x + y# 柯里化版本add_five = curry(add, 5)result = add_five(3)print(result) # 8
django.utils.functional.lazy(func)

返回一个惰性计算的对象,该对象在必要时调用提供的函数进行计算。

参数:func: 用于计算对象的函数。示例:

from django.utils.functional import lazy# 用于计算字符串的函数def get_string():    return 'Hello World!'# 创建惰性计算对象lazy_string = lazy(get_string, str)print(lazy_string)# 在需要时计算result = lazy_string()print(result) # 'Hello World!'
django.utils.functional.lazy_property(func)

一个属性描述符,返回一个惰性计算的对象,该对象在必要时调用提供的函数进行计算。

参数:func: 用于计算对象的函数。示例:

from django.utils.functional import lazy_propertyclass MyClass:    @lazy_property    def my_property(self):        print('Calculating...')        return 'Hello World!'# 创建类的实例obj = MyClass()# 访问属性print(obj.my_property) # 'Calculating... Hello World!'print(obj.my_property) # 'Hello World!'
django.utils.crypto

一个模块,提供了一些与加密和哈希相关的实用函数。

django.utils.crypto.get_random_string(length=12, allowed_chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

返回一个指定长度的随机字符串。

参数:length: 字符串长度,默认为12。allowed_chars: 允许出现的字符集合,默认为大小写字母和数字。示例:

from django.utils.crypto import get_random_string# 获取一个长度为10的随机字符串random_str = get_random_string(length=10)print(random_str)
django.utils.crypto.salted_hmac(key_salt, value, secret)

使用 HMAC 算法计算带盐的哈希值。

参数:key_salt: 用于产生密钥的盐。value: 用于计算哈希值的数据。secret: 用于生成 HMAC 密钥的字符串。示例:

from django.utils.crypto import salted_hmac# 计算哈希值hash_value = salted_hmac('my_salt', 'hello world', 'my_secret')print(hash_value)
django.utils.crypto.pbkdf2(password, salt, iterations=100000, dklen=0, digest=None)

通过 PBKDF2 算法计算密码的哈希值。

参数:password: 待哈希的密码。salt: 用于产生密钥的盐。iterations: 迭代次数,默认为 100000。dklen: 哈希值的长度,默认为密钥的长度。digest: 哈希算法,默认为 SHA-256。示例:

from django.utils.crypto import pbkdf2# 计算哈希值hash_value = pbkdf2('my_password', 'my_salt')print(hash_value)
django.utils.html

一个模块,提供了一些实用函数,用于处理 HTML。

django.utils.html.escape(text, quote=True)

将字符串中的特殊字符转义为 HTML 实体。

参数:text: 待转义的字符串。quote: 如果为 True,则同时转义单引号和双引号。示例:

from django.utils.html import escape# 转义字符串escaped_str = escape('<script>alert("Hello World!")</script>')print(escaped_str)
django.utils.html.format_html(format_string, *args, **kwargs)

将字符串格式化为 HTML。

参数:format_string: 包含 HTML 标记的格式化字符串。args: 位置参数,将替换格式化字符串中的占位符。kwargs: 关键字参数,将替换格式化字符串中的命名占位符。示例:

from django.utils.html import format_html# 格式化 HTMLhtml = format_html('<p>{}</p>', 'Hello World!')print(html)
django.utils.html.format_html_join(sep, format_string, args_generator)

将迭代器中的每个元素格式化为 HTML。

参数:sep: 元素之间的分隔符。format_string: 包含 HTML 标记的格式化字符串。args_generator: 生成位置参数的迭代器。示例:

from django.utils.html import format_html_join# 迭代器iterator = ['Hello', 'World']# 格式化 HTMLhtml = format_html_join(', ', '<p>{}</p>', ((s,) for s in iterator))print(html)
django.utils.text

一个模块,提供了一些实用函数,用于处理文本。

django.utils.text.slugify(value, allow_unicode=False)

将文本转换为 URL 友好的 slug。

参数:value: 待转换的文本。allow_unicode: 如果为 True,则允许使用非 ASCII 字符。示例:

from django.utils.text import slugify# 转换文本slug = slugify('Hello World!')print(slug)
django.utils.text.Truncator(text)

一个用于截断文本的辅助类。

参数:text: 待截断的文本。示例:

from django.utils.text import Truncator# 创建 Truncator 实例text = 'Hello World!'truncator = Truncator(text)# 截断文本truncated_text = truncator.chars(5)print(truncated_text) # 'Hello'
django.utils.text.wrap(text, width)

将文本按照指定宽度进行分行。

参数:text: 待分行的文本。width: 每行的宽度。示例:

from django.utils.text import wrap# 分行wrapped_text = wrap('Hello World!', 5)print(wrapped_text) # ['Hello', ' Worl', 'd!']
django.utils.translation

一个模块,提供了一些实用函数和类,用于国际化和本地化。

django.utils.translation.gettext(message)

获取翻译后的字符串。

参数:message: 待翻译的字符串。示例:

from django.utils.translation import gettext# 翻译字符串translated_str = gettext('Hello World!')print(translated_str)
django.utils.translation.gettext_lazy(message)

获取翻译后的字符串,并返回一个惰性计算的对象。

参数:message: 待翻译的字符串。示例:

from django.utils.translation import gettext_lazy# 翻译字符串translated_str = gettext_lazy('Hello World!')print(translated_str)
django.utils.translation.ngettext(singular, plural, number)

获取根据数量翻译后的字符串。

参数:singular: 单数形式的字符串。plural: 复数形式的字符串。number: 数量。示例:

from django.utils.translation import ngettext# 翻译字符串translated_str = ngettext('{} apple', '{} apples', 2).format(2)print(translated_str)
django.utils.translation.pgettext(context, message)

获取基于上下文翻译后的字符串。

参数:context: 上下文。message: 待翻译的字符串。示例:

from django.utils.translation import pgettext# 基于上下文翻译字符串translated_str = pgettext('menu', 'File')print(translated_str)
django.utils.translation.pgettext_lazy(context, message)

获取基于上下文翻译后的字符串,并返回一个惰性计算的对象。

参数:context: 上下文。message: 待翻译的字符串。示例:

from django.utils.translation import pgettext_lazy# 基于上下文翻译字符串translated_str = pgettext_lazy('menu', 'File')print(translated_str)
django.utils.translation.npgettext(context, singular, plural, number)

获取基于上下文和数量翻译后的字符串。

参数:context: 上下文。singular: 单数形式的字符串。plural: 复数形式的字符串。number: 数量。示例:

from django.utils.translation import npgettext# 基于上下文和数量翻译字符串translated_str = npgettext('menu', '{} file', '{} files', 2).format(2)print(translated_str)

标签: #django使用session