2024-09-03

在Django中配置数据库连接字符串通常在项目的settings.py文件中完成。以下是一个配置示例:




# settings.py
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # 使用PostgreSQL数据库
        'NAME': 'mydatabase',                       # 数据库名称
        'USER': 'mydatabaseuser',                   # 数据库用户
        'PASSWORD': 'mydatabasepassword',           # 数据库密码
        'HOST': 'localhost',                        # 数据库主机
        'PORT': '5432',                             # 数据库端口
    }
}

如果你使用的是SQLite(Django默认数据库),可以省略大部分配置,因为默认设置已经足够本地开发:




# settings.py
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',  # BASE_DIR是项目根目录的一个设置
    }
}

确保在__init__.py文件中添加以下代码,以便Django知道如何解析BASE_DIR




import os
 
from pathlib import Path
 
BASE_DIR = Path(__file__).resolve().parent.parent

这样就配置好了数据库连接串,在Django项目中可以使用python manage.py migrate命令来应用数据库迁移。

2024-09-03



from django import forms
from django.forms import ModelForm
from .models import Article
 
# 定义一个表单类来处理文章提交
class ArticleForm(ModelForm):
    class Meta:
        model = Article
        fields = ['title', 'content', 'thumbnail', 'tags']
 
# 使用这个表单类在视图中创建表单实例
def submit_article(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST, request.FILES)
        if form.is_valid():
            # 这里可以添加额外的逻辑,例如保存文章之前的处理
            form.save()
            # 保存文章后的处理
            return redirect('article_list')  # 重定向到文章列表页面
    else:
        form = ArticleForm()
    return render(request, 'submit_article.html', {'form': form})

这段代码展示了如何在Django中创建一个处理文章提交的表单,并在视图函数中处理POST请求。它使用了ModelForm来简化表单的创建过程,并将文件字段(如图片和文件)包括在内。这是一个标准的处理流程,适用于需要用户提交数据的Web应用程序。

2024-09-03

Django Cleanup是一个Django应用,它提供了一种自动管理文件的方式,比如在模型中存储文件,并在文件不再需要时自动删除它们。

以下是如何使用Django Cleanup的简要步骤:

  1. 安装Django Cleanup:



pip install django-cleanup
  1. django_cleanup.cleanup.CleanupConfig添加到你的Django项目的settings.py文件中的INSTALLED_APPS列表中:



INSTALLED_APPS = [
    # ...
    'django_cleanup.cleanup.CleanupConfig',
    # ...
]
  1. 配置CLEANUP\_KEEP\_FILES设置,以指定在文件不再被任何模型引用时应保留的文件时间(以秒为单位)。默认值为5年(1825天) 24小时 60分钟* 60秒。



CLEANUP_KEEP_FILES = 1825 * 24 * 60 * 60  # 默认值,五年
  1. 在模型中使用CleanupMixin或者在模型的FileFieldImageField中使用cleanup.CleanupMixin



from django.db import models
from django_cleanup.mixins import CleanupMixin
 
class MyModel(CleanupMixin, models.Model):
    file = models.FileField(upload_to='my_files/')
  1. 运行cleanup管理命令来删除不再需要的文件:



python manage.py cleanup
  1. (可选)设置定时任务以定期运行cleanup命令。

以上步骤提供了一个基本的介绍,实际使用时可能需要根据项目需求进行相应的配置调整。

2024-09-03

在Django中,auth模块提供了用户认证系统,它处理用户账号、组、权限以及基于cookie的用户验证。以下是使用auth模块的一些基本方法:

  1. 用户管理:

创建用户:




from django.contrib.auth.models import User
user = User.objects.create_user('username', 'email@example.com', 'password')

更改密码:




user.set_password('new_password')
user.save()
  1. 组管理:

创建组:




from django.contrib.auth.models import Group
group = Group.objects.create(name='group_name')

将用户添加到组:




group.user_set.add(user)
  1. 权限管理:

为用户添加权限:




user.user_permissions.add(permission)
  1. 登录和登出:

登录视图中使用authenticate来验证用户:




from django.contrib.auth import authenticate
user = authenticate(request, username='username', password='password')
if user is not None:
    # A backend authenticated the credentials
    pass
else:
    # No backend authenticated the credentials
    pass

在视图中登出用户:




from django.contrib.auth import logout
def logout_view(request):
    logout(request)
    # Redirect to a success page.
  1. 装饰器:

login_required装饰器强制用户登录才能访问视图:




from django.contrib.auth.decorators import login_required
 
@login_required
def my_view(request):
    # Do something for logged in users.
    pass

user_passes_test装饰器根据特定条件允许用户访问视图:




from django.contrib.auth.decorators import user_passes_test
 
def is_employee(user):
    return user.is_employee  # 假设用户模型有is_employee属性
 
@user_passes_test(is_employee)
def my_view(request):
    # Do something for employee users.
    pass

以上代码片段提供了使用Django auth模块的基本方法。在实际应用中,你需要根据具体需求调整这些方法。

2024-09-03



import os
from pathlib import Path
from django.utils.log import DEFAULT_LOGGING
 
# 获取项目根目录的路径
BASE_DIR = str(Path(__file__).resolve().parent.parent)
 
# 日志配置字典
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
        },
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, 'debug.log'),  # 日志文件路径
            'formatter': 'standard',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
 
# 将日志配置应用到Django项目
LOGGING = LOGGING_CONFIG

这段代码定义了一个日志配置字典,它包含了格式化器、处理器和记录器。其中定义了两个处理器:fileconsole,分别用于将日志输出到文件和控制台。记录器django指定了这两个处理器,并设置了日志级别为DEBUG。这样配置后,Django项目的所有日志将会记录在指定的文件中,并打印到控制台。这是一个简洁而有效的日志配置示例。

2024-09-03

以下是一个简化的示例,展示了如何在Django中创建一个相册日记模型,并提供了基本的数据库迁移命令和模型使用方法。




# 在你的Django应用的models.py文件中
from django.db import models
from django.contrib.auth.models import User
 
class Album(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    date_created = models.DateField(auto_now_add=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
 
    def __str__(self):
        return self.title
 
class Photo(models.Model):
    image = models.ImageField(upload_to='photos/%Y/%m/%d/')
    caption = models.CharField(max_length=100, blank=True)
    date_taken = models.DateField()
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
 
    def __str__(self):
        return self.caption or str(self.id)

接下来,在Django项目的根目录下运行以下命令来进行数据库迁移:




python manage.py makemigrations
python manage.py migrate

迁移完成后,你可以在你的视图(views.py)中创建和查询相册和照片,或者在Django的管理后台中直接管理相册和照片。

在管理后台添加相册和照片的示例代码:




# 在你的Django应用的admin.py文件中
from django.contrib import admin
from .models import Album, Photo
 
admin.site.register(Album)
admin.site.register(Photo)

现在,你可以通过访问 /admin/ 地址来管理相册和照片了。

2024-09-03



from django.db import models
from DjangoUeditor.models import UEditorField
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
 
# 假设我们有一个Comment模型,我们想要为它添加一个UEditorField字段
class Comment(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    text = UEditorField(verbose_name='评论内容', width=600, height=300, imagePath="upimg/", filePath="upfile/", default='')
 
# 使用Comment模型
# 例如,为一个帖子(Post)添加评论
post = Post.objects.get(id=1)
comment = Comment()
comment.content_object = post
comment.text = "<p>这是一个很棒的评论。</p>"
comment.save()

这个例子展示了如何在Django应用中使用DjangoUeditor库创建一个含有UEditor富文本编辑器的模型。我们定义了一个Comment模型,它有一个UEditorField字段用于输入评论内容。同时,我们使用了泛型关系字段来关联该评论到一个通用的内容类型,这里是一个假设的Post帖子。这样,我们可以为不同类型的对象添加评论,提高了模型的灵活性。

2024-09-03

在Django框架中,我们首先需要创建一个项目,然后在项目中创建一个应用。以下是具体的步骤和代码:

步骤1:创建项目

打开终端或命令提示符,然后输入以下命令来创建一个新的Django项目:




django-admin startproject myproject

这将创建一个名为myproject的新目录,它包含了初始的Django项目结构。

步骤2:创建应用

进入项目目录,然后使用以下命令创建一个新的Django应用:




cd myproject
python manage.py startapp myapp

这将在myproject目录中创建一个名为myapp的新目录,它包含了初始的Django应用结构。

步骤3:运行开发服务器

为了测试你的设置,可以使用Django自带的开发服务器运行你的项目:




python manage.py runserver

默认情况下,开发服务器会在localhost的8000端口上运行。在浏览器中打开 http://127.0.0.1:8000/ ,你应该看到Django的欢迎页面。

步骤4:编写简单的视图

打开myapp/views.py文件,然后添加以下代码:




from django.http import HttpResponse
 
def home(request):
    return HttpResponse("Hello, World!")

步骤5:配置URLs

接下来,你需要将新视图函数连接到URL。打开myapp/urls.py文件,然后替换其中的代码:




from django.urls import path
from .views import home
 
urlpatterns = [
    path('', home, name='home'),
]

步骤6:在项目中包含应用的URLs

最后,在项目的urls.py文件中包含应用的URL配置。打开myproject/urls.py文件,然后添加以下代码:




from django.contrib import admin
from django.urls import include, path
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]

现在,重新启动开发服务器,然后在浏览器中刷新 http://127.0.0.1:8000/ ,你应该看到显示"Hello, World!"的页面。

至此,你已经完成了创建一个简单的Django项目和应用,并编写了一个可以访问的视图函数。这只是Django学习的开始,后续你将会学习更多的主题,例如模型、表单、视图、模板等。

2024-09-03

在Django中创建一个新的应用(app)可以使用以下命令:




python manage.py startapp myapp

这里myapp是你想要创建的应用的名称。执行这个命令后,Django会在你的项目目录下创建一个名为myapp的文件夹,里面包含了初始的应用结构。

接下来,你需要在你的Django项目中注册这个新应用。为此,你需要在你的settings.py文件中的INSTALLED_APPS配置中添加这个新应用。

例如:




# settings.py
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 添加你的应用
    'myapp.apps.MyAppConfig',  # 推荐的方式
    # 或者
    'myapp',  # 简单形式,如果不需要额外的配置
]

这里myapp.apps.MyAppConfig是应用的配置类,它在myapp/apps.py文件中被默认创建。如果你不需要对应用进行额外的配置,你可以直接使用应用的名称。

以上就是创建和配置Django应用的基本步骤。

2024-09-03



from django.contrib.auth.models import User
from django.shortcuts import render
from rest_framework import generics, authentication, permissions
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import UserSerializer
 
class RegisterView(generics.CreateAPIView):
    """
    用户注册视图
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer
 
class LoginView(APIView):
    """
    用户登录视图
    """
    def post(self, request, *args, **kwargs):
        username = request.data.get("username")
        password = request.data.get("password")
        user = authenticate(request, username=username, password=password)
        if user is not None:
            token, created = Token.objects.get_or_create(user=user)
            return Response({"token": token.key})
        else:
            return Response({"error": "登录失败"}, status=400)
 
class UserDetailView(generics.RetrieveAPIView):
    """
    用户详情视图
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)

这个代码实例提供了用户注册、登录以及用户详情的视图。注册视图使用了CreateAPIView来处理创建用户的请求,登录视图是一个标准的APIView,它检查用户凭证并返回一个访问令牌,用户详情视图则要求用户已经通过了认证,并且使用了Token认证。