django快速基本配置(2)

news2024/11/24 3:35:59

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

目录

配置开发目录

配置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.coloradmin.cn/o/2229128.html

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

相关文章

【SQL】SQL函数

&#x1f4e2; 前言 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。 字符串函数数值函数日期函数流程函数 &#x1f384; 字符串函数 ⭐ 常用函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接&#xff0c;将S1&#xff0c;S2&#xff0…

Javaweb 实验4 xml

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验四 XML 目的&#xff1a; 安装和使用XML的开发环境认识XML的不同类型掌握XML文档的基本语法了解D…

第二十章 Vue组件通信之父子通信

目录 一、引言 二、组件关系分类 三、组件通信的解决方案 3.1. 父子通信流程图 3.2. 父组件通过 props 将数据传递给子组件 3.2.1. 代码App.vue 3.2.2. 代码MySon.vue 3.3. 子组件利用 $emit 通知父组件修改更新 ​编辑3.3.1. 代码App.vue 3.3.2. 代码MySon.vue 3…

使用GDAL库的ogr2ogr将GeoJSON数据导入到PostgreSql中

数据下载 数据下载地址&#xff1a;https://datav.aliyun.com/portal/school/atlas/area_selector 我这里下载全国所有城市的数据进行导入 下载安装GDAL 以下是安装 ogr2ogr&#xff08;GDAL 工具集的一部分&#xff09;的步骤&#xff0c;适用于 Windows、macOS 和 Linux 系…

pycharm configurations中配置运行fastapi项目

环境 windows11 python3.11 fastapi0.115 使用virtualenv安装fastapi uvicorn pip install fastapi pip install uvicorn目的 在pycharm中可以一键运行&#xff0c;直接把命令行的运行参数配置到pycharm中, 即使用"uvicorn main:app --reload"运行main文件 配置 …

和小北一起Cozeplay | 扣子万圣节企划

前言&#xff1a; &#x1f383;&#x1f383;&#x1f383;在这个充满神秘与欢乐的万圣节季节&#xff0c;扣子携手小北&#xff0c;为大家带来了一场别开生面的Cozeplay活动&#xff01;无论你是想要体验一把惊悚刺激的万圣节氛围&#xff0c;还是想要展示自己的创意与才华&a…

工作转型与个人突破提升:如何在社会浪潮中激流勇进

文章目录 一、写在前面二、技术人的迷茫三、做好项目经理其实很难四、从纯技术者转型为管理者面临的事五、最重要的技能【重磅推荐&#xff01;免费简单内网穿透神器&#xff01;支持linuxwindows】 一、写在前面 近期工作变动&#xff0c;虽然说对于开发者而言&#xff0c;工…

为什么NMOS管比PMOS管更受欢迎?

NMOS在实际应用中为何比PMOS要更受欢迎。本文将从导电沟道、电子迁移率和器件速度等多个方面来展开讲解。 首先是在性能方面考虑&#xff1a; 与NMOS管驱动能力相同的一个PMOS管&#xff0c;其器件面积可能是NMOS管的2&#xff5e;3倍&#xff0c;然而器件面积会影响导通电阻…

Windows安装Git最新保姆级教程【附安装包】

一、Git下载: 链接&#xff1a;https://pan.baidu.com/s/1_uH-_-cdBb6GD58oLcxvAA 提取码&#xff1a;m366 二、安装Git 1.右键桌面【此电脑】-【属性】&#xff0c;查看操作系统是32位还是64位。 2.下载好对应64位操作系统版本的Git&#xff0c;解压并打开。 我电脑系统是64位…

网络通信与并发编程(七)GIL、协程

GIL、协程 文章目录 GIL、协程一、GIL二、协程 一、GIL GIL本质就是CPython解释器中的一把互斥锁。那既然是互斥锁&#xff0c;原理都一样&#xff0c;都是让多个并发线程同一时间只能有一个执行&#xff0c;以此确保共享数据的安全性。有了GIL的存在&#xff0c;同一进程内的…

6. 线程池实现

WebServer::thread_pool() 方法用于创建并初始化线程池&#xff0c;为服务器的并发处理能力提供支持。在 Web 服务器中&#xff0c;线程池用于管理多个工作线程&#xff0c;这些线程负责处理客户端的 HTTP 请求&#xff0c;以确保服务器可以同时处理多个并发请求&#xff0c;而…

基于Java的茶产品销售平台系统【附源码】

基于Java的茶产品销售平台系统 效果如下&#xff1a; 系统首页界面 用户登录界面 茶叶信息界面 在线客服界面 购物车界面 管理员登录界面 管理员功能界面 茶叶类型管理界面 研究背景 在当今社会&#xff0c;人们的生活节奏逐渐加快&#xff0c;人们对经济的要求逐渐降低&…

AI代币是什么?AI与Web3结合的未来方向在哪里?

近两年随着人工智能的崛起&#xff0c;AI已经渗透到制造业、电商、广告、医药等各个行业&#xff0c;加密货币领域也不例外&#xff0c;人工智能与区块链的融合&#xff0c;让我们看到了独特的数字资产 — AI加密代币。 它的流行始于2022年底&#xff0c;随着OpenAI智能聊天机…

Linux下MySQL8.x的编译安装与使用

Linux下MySQL的安装与配置 1. 安装环境初始化 1.1 查看是否安装过MySQL 如果使用rpm安装, 检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写 # 或者 yum list installed | grep mysql如果存在mysql-libs的旧版本包&#xff0c;显示如下 #存在 [rootlocalhost ~]…

如何在不安装WDK的情况下快速安装DevCon.exe?

你已经找到这里了&#xff0c;想必目的已经很清晰了&#xff0c;就是想要实现不安装WDK&#xff0c;又想使用Devcon.exe&#xff0c;那么往下看就对了。 这里直接上GitHub链接&#xff1a;https://github.com/Drawbackz/DevCon-Installer 考虑到网络环境&#xff0c;这里提供CS…

CSP/信奥赛C++刷题训练:经典二分例题(3):洛谷P8814[CSP-J 2022] 解密

CSP/信奥赛C++刷题训练:经典二分例题(3) [CSP-J 2022] 解密 题目描述 给定一个正整数 k k k,有 k k k 次询问,每次给定三个正整数 n i , e i , d i n_i, e_i, d_i ni​,ei​,di​,求两个正整数 p i , q i p_i, q_i pi​,qi​,使 n i = p i q i n_i = p_i \times…

git修改用户名与查看git的账号与密码

git修改用户名与查看git的账号与密码 文章目录 git修改用户名与查看git的账号与密码修改idea中代码提交的用户名查看git的账号与密码 修改idea中代码提交的用户名 1、打开您的IDEA&#xff0c;点击打开最下方的Terminal终端 2、输入以下命令&#xff0c;并回车执行 查看当前…

linux 安装php扩展:xlswriter

这里以xlswriter扩展为例 进入官方扩展&#xff1a;https://pecl.php.net查询自己php对应版本的扩展包 下载扩展 wget https://pecl.php.net/get/xlswriter-1.5.5.tgz 解压扩展 tar -zxvf xlswriter-1.5.5.tgz 进入扩展目录 cd xlswriter-1.5.5 查找对应php版本的phpiz…

解决电脑突然没有声音

问题描述&#xff1a;电脑突然没有声音了&#xff0c;最近没有怎么动过系统&#xff0c;没有安装或者卸载过什么软件&#xff0c;也没有安装或者卸载过驱动程序&#xff0c;怎么就没有声音了呢&#xff1f; 问题分析&#xff1a;仔细观察&#xff0c;虽然音量按钮那边看不到什…