from django.db import models
class UserInfo(models.Model):
username = models.CharField(verbose_name='用户名', max_length=32)
# view.py
def text(request):
# 获取其所属的app名称
print(models.UserInfo._meta.app_label)
# 获取当前表名
print(models.UserInfo._meta.model_name)
# 获取类中的字段对象
print(models.UserInfo._meta.get_field('username'))
# 获取以及字段中的属性
print(models.UserInfo._meta.get_field('username').verbose_name)
return HttpResponse('ok')
############### 输出 ##############
# app01
# userinfo
# app01.UserInfo.username
# 用户名
# 语 法:'
app
的
名称
.自定义用户模型的
名称
'
AUTH_USER_MODEL = 'admi.UserModel'
2.在
models
文件
中
编写UserModel
类
from
django
.db import
models
from
django
.contrib.auth.
models
import AbstractUser
#
Django
框架将createsuperuser创建的用户以及在amdin后台添加的用户,默认都保存在了a
djngo通过数据库
表名
获取
app
(
django
Config) bigsur@BigSurdeAir
django
Config %
python
manage.py shell
Python
3.8.12 (default, Oct 12 2021, 06:23:56)
[Clang 10.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
1.
Django
框架开发的项目属于B/S架构,通过浏览器访问项目
2.
Django
框架是采用MTV模式创建项目:
2.1 M:mode 模型层 用于操作sql语句从数据库
中
获得或者修改数据
2.2 T:template 模板 用于编写前端html网页
2.3 V:
view
视图 用于调度模型层
获取
数据和调度模板展示页面
view
s.py等价于 jsp课程
中
的servlet
3.
Django
框架安装需要注意对应的版本:
3.1
django
的版
列如现在我们创建了一个图书管理系统,需要在
view
里面用到Author和SchoolDormitory项目名字字符串:
model_name = Author._meta.model_name
app
_name = Author._meta.
app
_name
pip install
django
(
django
==版本 可以指定版本安装)
创建
django
项目
django
-admin startproject fist_
app
(项目名)
python
manage.py runserver [0.0.0.0:8000]
任何应用程序的基本,不管是不是Web应用,都是它所展现、收集和修改的信息。因此,若将应用程序分层,模型(model)将是最底部的一层,它是基础。视图和模板可以根据数据进出模型的方式以及表现的形式任意替换,但模型却相对稳定得多。
从设计整个Web应用的角度来说,模型可能是最容易领会却也是最难掌握的部分。在面向
对象
系统里对一个现实问题进行建模相对来说通常不难,但是对大流量的网站来说,
# 存放多张表
中
的公共
字段
# id =
models
.AutoField(primary_key=True, verbose_name='id主键', help_text='id主键')
create_time =
models
.DateTimeField(au
from
app
import
models
class RegForm(forms.Form):
username=forms.CharField(max_length=8,min_length=3,label='用户名',
要将
Django
Admin
中
编辑用户权限和组的操作记录在指定的数据库
中
,您需要执行以下步骤:
1. 在您的
Django
项目
中
创建一个新的应用程序,用于记录操作日志。您可以将其命名为“logs”或
类
似的
名称
。
2. 在您的“logs”应用程序
中
创建一个新的模型,用于记录用户权限和组编辑操作的详细信息。例如,您可以创建一个名为“UserActionLog”的模型,并将其定义如下:
from
django
.db import
models
from
django
.contrib.auth.
models
import User, Group
class UserActionLog(
models
.Model):
user =
models
.ForeignKey(User, on_delete=
models
.CASCADE)
group =
models
.ForeignKey(Group, on_delete=
models
.CASCADE)
action =
models
.CharField(max_length=100)
timestamp =
models
.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.username}: {self.action} {self.group.name}"
该模型包括一个外键引用“User”和“Group”模型,以及一个用于记录操作的“action”
字段
和一个时间戳
字段
。
3. 在您的
Django
项目的“settings.py”文件
中
配置日志记录应用程序的数据库。例如,如果您使用PostgreSQL数据库,您可以添加以下设置:
DATABASES = {
'default': {
'ENGINE': '
django
.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
'logs': {
'ENGINE': '
django
.db.backends.postgresql',
'NAME': 'mylogsdatabase',
'USER': 'mylogsdatabaseuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
DATABASE_ROUTERS = ['logs.routers.LogsRouter']
这将为您的日志记录应用程序配置一个新的PostgreSQL数据库,并将其命名为“logs”。它还将指定一个名为“LogsRouter”的路由器,该路由器将
Django
Admin的所有操作记录到“logs”数据库
中
。
4. 在您的“logs”应用程序
中
创建一个名为“routers.py”的文件,并定义一个名为“LogsRouter”的路由器
类
,如下所示:
class LogsRouter:
def db_for_read(self, model, **hints):
if model._meta.
app
_label == 'logs':
return 'logs'
return None
def db_for_write(self, model, **hints):
if model._meta.
app
_label == 'logs':
return 'logs'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.
app
_label == 'logs' or obj2._meta.
app
_label == 'logs':
return True
return None
def allow_migrate(self, db,
app
_label, model_name=None, **hints):
if
app
_label == 'logs':
return db == 'logs'
return None
该路由器将所有与“logs”应用程序相关的模型操作路由到“logs”数据库
中
。
5. 在您的“logs”应用程序
中
创建一个名为“admin.py”的文件,并将以下代码添加到文件
中
:
from
django
.contrib.admin.
models
import LogEntry
from
django
.contrib.auth.
models
import User, Group
from
django
.contrib.contenttypes.
models
import ContentType
from
django
.dispatch import receiver
from
django
.db.
models
.signals import post_save, post_delete
from .
models
import UserActionLog
@receiver(post_save, sender=User)
def log_user_save(sender, instance, **kwargs):
content_type = ContentType.objects.get_for_model(instance)
log_entry = LogEntry.objects.filter(
content_type=content_type,
object_id=instance.id,
action_flag=2
).latest('id')
user_action = UserActionLog(
user=instance,
group=None,
action=log_entry.get_change_message(),
user_action.save()
@receiver(post_save, sender=Group)
def log_group_save(sender, instance, **kwargs):
content_type = ContentType.objects.get_for_model(instance)
log_entry = LogEntry.objects.filter(
content_type=content_type,
object_id=instance.id,
action_flag=2
).latest('id')
user_action = UserActionLog(
user=None,
group=instance,
action=log_entry.get_change_message(),
user_action.save()
@receiver(post_delete, sender=User)
def log_user_delete(sender, instance, **kwargs):
user_action = UserActionLog(
user=instance,
group=None,
action='User deleted',
user_action.save()
@receiver(post_delete, sender=Group)
def log_group_delete(sender, instance, **kwargs):
user_action = UserActionLog(
user=None,
group=instance,
action='Group deleted',
user_action.save()
这将使用
Django
信号来捕获
Django
Admin
中
与用户和组相关的所有操作,并将其记录到“logs”数据库
中
的“UserActionLog”模型
中
。
完成这些步骤后,您现在可以在
Django
Admin
中
编辑用户权限和组时记录操作。这些操作将被记录在“logs”数据库
中
的“UserActionLog”模型
中
。您可以使用
Django
ORM查询这些记录并将它们用于分析和监控用户操作。
所以新手使用celery很仔细的建立文件夹名字、文件夹层级、python文件名字。
所以网上的celery博客教程虽然很多,但是并不能学会使用,因为要运行起来需要以下6个方面都掌握好,博客文字很难表达清楚或者没有写全面以下6个方面。
celery消费任务不执行或者报错NotRegistered,与很多方面有关系,如果要别人排错,至少要发以下6方面的截图,因为与一下6点关系很大。
1)整个项目目录结构, 2)@task入参 ,3)celery的配置,4)celery的配置 include ,5)cmd命令行启动参数 --queues= 的值,6)用户在启动cmd命令行时候,用户所在的文件夹。
在不规范的文件夹路径下,使用celery难度很高,一般教程都没教。
[项目文件夹目录格式不规范下的celery使用演示](https://github.com/ydf0509/celery_demo) 。
此国产分布式函数调度框架 funboost python万能通用函数加速器 https://funboost.readthedocs.io/ ,
从用法调用难度,用户所需代码量,超高并发性能,qps控频精确程度,支持的中间件类型,任务控制方式,稳定程度等19个方面全方位超过celery。发布性能提高1000%,消费性能提高2000%。
python万能分布式函数调度框架funboost支持python所有类型的并发模式和一切知名消息队列中间件,python函数加速器,框架包罗万象,万能编程功能宝典,一统编程思维,与业务不绑定,适用范围广。
funboot能支持celery作为中间件,用户可以使用funboost的极简api来使用celery核心调度,不用手动复杂的配置操作celery
funboost 自动化操作celery https://github.com/ydf0509/funboost_support_celery_demo