欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > django快速基本配置(2)

django快速基本配置(2)

2024/11/6 14:40:50 来源:https://blog.csdn.net/yanminghe66666/article/details/143403408  浏览:    关键词: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问题

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com