django快速基本配置(2)

知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具

目录

配置开发目录

配置MySQL数据库

配置Redis数据库

配置工程日志

用户注册

跨域CORS

 

注意


配置开发目录

libs 存放第三方的库文件

utils 存放项目自己定义的公共函数或类等

apps 存放Django的应用

templates 模板文件存放文件夹

配置MySQL数据库

1. 新建MySQL数据库

1.新建MySQL数据库:tuling_mall

$ create database tuling_mall charset=utf8;

2.新建MySQL用户

$ create user poppies identified by 'root';

3.授权itcast用户访问meiduo_mall数据库

$ grant all on tuling_mall.* to 'poppies'@'%';

4.授权结束后刷新特权

$ flush privileges;

2. 配置MySQL数据库

文档

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 数据库引擎'HOST': '127.0.0.1', # 数据库主机'PORT': 3306, # 数据库端口'USER': 'poppies', # 数据库用户名'PASSWORD': 'root', # 数据库用户密码'NAME': 'tuling_mall' # 数据库名字},
}

3. 安装mysqlclient扩展包

1.安装驱动程序

$ pip install mysqlclient
配置完成后:运行程序,测试结果。

配置Redis数据库

1. 安装django-redis扩展包

1.安装django-redis扩展包

$ pip install django-redis
2.django-redis使用说明文档

点击进入文档

2. 配置Redis数据库

CACHES = {"default": { # 默认"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/0","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},"session": { # session"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/1","OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

default:

  • 默认的Redis配置项,采用0号Redis库。

session:

  • 状态保持的Redis配置项,采用1号Redis库。

SESSION_ENGINE

  • 修改session存储机制使用Redis保存。

SESSION_CACHE_ALIAS:

  • 使用名为"session"的Redis配置项存储session数据。

配置完成后:运行程序,测试结果。

配置工程日志

文档

1. 配置工程日志


import os
LOGGING = {'version': 1,'disable_existing_loggers': False,  # 是否禁用已经存在的日志器'formatters': {  # 日志信息显示的格式'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'},'simple': {'format': '%(levelname)s %(module)s %(lineno)d %(message)s'},},'filters': {  # 对日志进行过滤'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue',},},'handlers': {  # 日志处理方法'console': {  # 向终端中输出日志'level': 'INFO','filters': ['require_debug_true'],'class': 'logging.StreamHandler','formatter': 'simple'},'file': {  # 向文件中输出日志'level': 'INFO','class': 'logging.handlers.RotatingFileHandler','filename': os.path.join(BASE_DIR, 'logs/meiduo.log'),  # 日志文件的位置'maxBytes': 300 * 1024 * 1024,'backupCount': 10,'formatter': 'verbose'},},'loggers': {  # 日志器'django': {  # 定义了一个名为django的日志器'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志'propagate': True,  # 是否继续传递日志信息'level': 'INFO',  # 日志器接收的最低日志级别},}
}
 

2. 准备日志文件目录

3. 日志记录器的使用

不同的应用程序所定义的日志等级可能会有所差别,分的详细点的会包含以下几个等级:

  • FATAL/CRITICAL = 重大的,危险的
  • ERROR = 错误
  • WARNING = 警告
  • INFO = 信息
  • DEBUG = 调试
  • NOTSET = 没有设置
import logging
​
# 创建日志记录器
logger = logging.getLogger('django')
# 输出日志
logger.debug('测试logging模块debug')
logger.info('测试logging模块info')
logger.error('测试logging模块error')

用户注册

1. 创建用户模块应用

apps包下创建应用users

$ python ../manage.py startapp users

2. 注册用户模块应用

INSTALLED_APPS = [...
​'apps.users',
]

注册完users应用后,运行测试程序。

3. 自定义用户模型类

思考:为什么要自定义用户模型类?

  • 观察注册界面会发现,图灵商城注册数据中必选用户mobile信息。
  • 但是Django默认用户模型类中没有mobile字段,所以要自定义用户模型类。

如何自定义用户模型类?

  • 继承自AbstractUser(可通过阅读Django默认用户模型类的源码得知) 。
  • 新增mobile字段。
from django.db import models
from django.contrib.auth.models import AbstractUser
​
# Create your models here.
​
​
class User(AbstractUser):"""自定义用户模型类"""mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
​class Meta:db_table = 'tb_users'verbose_name = '用户'verbose_name_plural = verbose_name
​def __str__(self):return self.username

4. 知识要点

  1. Django自带用户认证系统核心就是User对象
  2. Django用户认证系统包含了一系列对用户的操作,比如:模型类,认证,权限,分组,密码处理等。
  3. Django用户认证系统中的用户模型类可以自定义,继承自AbstractUser
  4. Django用户认证系统说明文档

迁移用户模型类

1. 指定用户模型类

文档

思考:为什么Django默认用户模型类是User?

  • 阅读源代码:'django.conf.global_settings’
AUTH_USER_MODEL = 'auth.User'

结论:

  • Django用户模型类是通过全局配置项AUTH_USER_MODEL决定的

配置规则:

AUTH_USER_MODEL = '应用名.模型类名'
# 指定本项目用户模型类
AUTH_USER_MODEL = 'users.User'
2. 迁移用户模型类

1.创建迁移文件

  • python manage.py makemigrations

2.执行迁移文件

  • python manage.py migrate

3. 知识要点
  1. 用户认证系统中的用户模型类,是通过全局配置项AUTH_USER_MODEL决定的。
  2. 如果迁移自定义用户模型类,必须先配置 AUTH_USER_MODEL

报这种错是因为只能有一个超级管理员

跨域CORS

我们的前端和后端分别是两个不同的端口

前端服务127.0.0.1:8080后端服务127.0.0.1:8000

现在,前端与后端分处不同的域名,这就涉及到跨域访问数据的问题,因为浏览器的同源策略,默认是不支持两个不同域间相互访问数据,而我们需要在两个域名间相互传递数据,这时我们就要为后端添加跨域访问的支持。

我们使用CORS来解决后端对跨域访问的支持。

使用django-cors-headers扩展

参考文档

安装

pip install django-cors-headers

添加应用

INSTALLED_APPS = (...'corsheaders',...
)
中间层设置

MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',...
]
添加白名单

# CORS
CORS_ORIGIN_WHITELIST = ('http://127.0.0.1:8080','http://localhost:8080','http://127.0.0.1:8000'
)
CORS_ALLOW_CREDENTIALS = True  # 允许携带cookie
  • 凡是出现在白名单中的域名,都可以访问后端接口
  • CORS_ALLOW_CREDENTIALS 指明在跨域访问中,后端是否支持对cookie的操作。

用户名重复注册

1. 用户名重复注册逻辑分析

3. 用户名重复注册后端逻辑

from django.views import View
from apps.users.models import User
from django.http import JsonResponse
​
class UsernameCountView(View):"""判断用户名是否重复注册"""
​def get(self, request, username):""":param request: 请求对象:param username: 用户名:return: JSON"""count = User.objects.filter(username=username).count()return JsonResponse({'code': 0, 'errmsg': 'OK', 'count': count})

4.添加路由转换器

在utils包下创建一个converters.py文件

class UsernameConverter:"""自定义路由转换器去匹配用户名"""# 定义匹配用户名的正则表达式regex = '[a-zA-Z0-9_-]{5,20}'
​def to_python(self, value):return str(value)

在总路由中添加路由转换器

from django.contrib import admin
from django.urls import path,include
​
from utils.converters import UsernameConverter
from django.urls import register_converter
​
register_converter(UsernameConverter,'username')
​
urlpatterns = [path('admin/', admin.site.urls),path('',include('apps.users.urls'))
]

在子应用中调用验证

from django.urls import path
from . import views
​
urlpatterns = [# 判断用户名是否重复path('usernames/<username:username>/count/',views.UsernameCountView.as_view()),
]

注意

我们通过postman或者浏览器验证的时候回出现CSRF Forbidden问题

 

 

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

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

相关文章

前端技术月刊-2024.11

本月技术月刊聚焦于前端技术的最新发展和业务实践。业界资讯部分&#xff0c;React Native 0.76 版本发布&#xff0c;带来全新架构&#xff1b;Deno 2.0 和 Node.js 23 版本更新&#xff0c;推动 JavaScript 生态进步&#xff1b;Flutter 团队规模缩减&#xff0c;引发社区关注…

Golang的Web应用架构设计

# Golang的Web应用架构设计 介绍 是一种快速、高效、可靠的编程语言&#xff0c;它在Web应用开发中越来越受欢迎。Golang的Web应用架构设计通常包括前端、后端和数据库三个部分。在本篇文章中&#xff0c;我们将详细介绍Golang的Web应用架构设计及其组成部分。 前端 在Golang的…

element-plus按需引入报错AutoImport is not a function

官网文档&#xff1a;快速开始 | Element Plus webpack配置 // webpack.config.js const AutoImport require(unplugin-auto-import/webpack) const Components require(unplugin-vue-components/webpack) const { ElementPlusResolver } require(unplugin-vue-components…

【51单片机】串口通信原理 + 使用

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 串口硬件电路UART串口相关寄存器 编码单片机通过串口发送数据电脑通过串口发送数据控制LED灯 串口 串口是一种应用十分广泛的通讯接…

操作系统——计算机系统概述——1.4操作系统结构

目录 操作系统的体系结构 大内核&#xff08;宏内核/单内核&#xff09;&#xff1a; 微内核&#xff1a; 分层法 模块化 操作系统的体系结构 大内核&#xff08;宏内核/单内核&#xff09;&#xff1a; 将操作系统的主要功能模块都作为系统内核&#xff0c;运行在核心态。…

ssh和ssl的区别在哪些方面?

在网络安全和数据保护领域&#xff0c;谈话中经常提到的两个词是SSH(安全外壳)和SSL(安全套接字层)。尽管这两者在在线通信安全中都具有重要意义&#xff0c;但它们的使用目的不同&#xff0c;并且处于网络堆栈的不同级别。本文将深入分析 SSH 和 SSL 主要区别在哪些方面。 概念…

第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八

一、流量控制 一般来说&#xff0c;我们总是希望数据传输得更快一些&#xff0c;但是如果发送方把数据发送得太快&#xff0c;接收方可能来不及接收&#xff0c;造成数据的丢失&#xff0c;数据重发&#xff0c;造成网络资源的浪费甚至网络拥塞。所谓的流量控制&#xff08;fl…

基于卷积神经网络的棉花病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 棉花病害识别与防治系统&#xff0c;卷积神经网络&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python源码】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积…

基于STM32的智能停车场管理系统设计

引言 本项目旨在基于STM32微控制器设计一个智能停车场管理系统。该系统集成了多种传感器和控制模块&#xff0c;以实现停车位实时检测、车辆识别、自动控制栏杆、车位信息显示和云端数据管理等功能。智能停车场管理系统可以有效提升停车场的运转效率&#xff0c;改善车主的停车…

《大数据与人工智能:提升数据质量与数量的利器》

《大数据与人工智能&#xff1a;提升数据质量与数量的利器》 一、大数据与人工智能的融合趋势二、大数据增加数据数量的方法&#xff08;一&#xff09;不同途径的数据增量&#xff08;二&#xff09;数据增强的多样方法 三、人工智能提升数据数量的手段&#xff08;一&#xf…

C/C++常用编译工具链:GCC,Clang

目录 GNU Compiler Collection GCC的优势 编译产生的中间文件 Clang Clang的特点 什么是LLVM&#xff1f; Clang编译过程中产生的中间表示文件 关于Clang的调试 C 编译工具链中有几个主要的编译工具&#xff0c;包括&#xff1a; GNU Compiler Collection (GCC…

停车位类型分割系统:一条龙教学体系

停车位类型分割系统源码&#xff06;数据集分享 [yolov8-seg-aux&#xff06;yolov8-seg-C2f-DAttention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al l…

DICOM标准:CR图像模块属性详解——计算放射线照相术(CR)及其在DICOM中的表示

目录 CR图像及其在DICOM中的表示 1 计算放射线照相术 1.1 CR序列组件 1.1 -- CR 序列模块属性 1.2 CR 图像模块 表1.2 -- CR 图像模块属性 结论 CR图像及其在DICOM中的表示 计算放射线照相术&#xff08;Computed Radiography, CR&#xff09;是一种利用计算机技术对传统…

springboot 基于web的动漫会员购系统,计算机毕业设计项目源码 024,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;动漫艺术当然也不例外。动漫会员购系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;采用…

dns构建

&#xff08;1&#xff09;用户输入域名发起域名查询请求。 &#xff08;2&#xff09;计算机操作系统先查找本地hosts文件中是否有这个域名与IP的对应关系&#xff0c;有就返回结果给用户&#xff0c;没有就进入下一步。 &#xff08;3&#xff09;hosts文件找那个没有此域名…

深度了解flink(九) JobManager(3) HA分析

HA核心类、接口 HighAvailabilityServices HighAvailabilityServices是HA Service的核心接口&#xff0c;具体功能如下&#xff1a; 1.定义了高可用组件&#xff08;Dispatcher、ResourceManager等&#xff09;的leader选举接口和leader获取接口 2.检查点元数据的持久&…

爱普生SG-8101CA可编程晶振应用在工业自动化机器人

在工业自动化的浪潮中&#xff0c;机器人无疑是最耀眼的明星&#xff0c;它们以高效、精准的工作能力重塑了现代工业生产的格局。而在这些工业自动化机器人的核心深处&#xff0c;爱普生 SG - 8101CA 可编程晶振就像一颗强大而稳定的心脏&#xff0c;为机器人的卓越表现提供了坚…

【HarmonyOS】引导用户跳转APP设置详情页开启权限

【HarmonyOS】引导用户跳转设置APP详情页开启权限 前言 众所周知在鸿蒙应用中&#xff0c;向用户申请权限时&#xff0c;会弹出系统请求授权的弹框。当用户拒绝了你申请的权限&#xff0c;弹框会直接关闭。当下次触发同样的权限申请&#xff0c;会直接返回失败&#xff0c;不…

【大数据学习 | HBASE】hbase的原理与组成结构

1. hbase的简述 hbase作为google的大数据三篇比较重要的论文之一&#xff0c;它的起源叫做bigtable&#xff0c;意思非常简单就是大表的意思&#xff0c;是一个分布式存储很多数据的大型表格系统&#xff0c;它是对于hdfs中的数据不能直观查询和随机读写的病痛的一个补充和完善…

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了&#xff0c;但是需要调用腾讯云翻译&#xff0c;一直没成功。 第一步就是&#xff0c;按照这上面方法做&#xff1a;百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是&#xff1a;Zotero PDF translat翻译&#xff1a;申请腾讯翻译接口 主要是…