2024-08-28

在Django中实现登录功能,你可以使用Django自带的认证系统。以下是一个简单的示例:

首先,确保你已经创建了Django项目以及应用,并且在settings.py中配置了数据库。

  1. urls.py中添加登录URL:



from django.urls import path
from django.contrib.auth import views as auth_views
 
urlpatterns = [
    # ...
    path('login/', auth_views.LoginView.as_view(), name='login'),
]
  1. 创建登录模板login.html(通常放在templates文件夹中的account文件夹内):



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form method="post" action="{% url 'login' %}">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Log in</button>
    </form>
</body>
</html>
  1. 如果你想自定义登录行为,可以创建一个继承自LoginView的类,并覆盖相应的方法。



from django.contrib.auth.views import LoginView
 
class CustomLoginView(LoginView):
    # 可以在这里添加额外的逻辑,比如记录日志或者处理表单数据
    pass
 
# 然后在 urls.py 中使用这个自定义的视图
path('login/', CustomLoginView.as_view(), name='login'),

这样,Django的默认登录功能就可以使用了。你可以通过访问/login/来进入登录页面,并且用户输入正确的用户名和密码后可以登录到应用中。如果需要定制登录表单,你可以在自定义的CustomLoginView中修改form_class属性。

2024-08-28



from django.db import models
from django.utils.translation import gettext_lazy as _
from django_recurrence.fields import RecurrenceField
 
class RecurringTask(models.Model):
    name = models.CharField(_('Name'), max_length=255)
    recurrence = RecurrenceField(_('Recurrence'))
 
    def __str__(self):
        return self.name

这个例子展示了如何在Django模型中使用RecurrenceField来管理任务的循环性。RecurrenceField允许你指定任务的重复模式,比如每日、每周或每月特定的日期。这个字段提供了一个便捷的方式来管理定期发生的事件。

2024-08-28

在Django框架中,视图层负责处理用户请求并返回响应。视图可以使用Django的HttpRequest对象来获取请求的相关信息,并使用HttpResponse或其子类(如JsonResponse)来返回响应。

以下是一个简单的Django视图示例,它处理根URL的GET请求并返回一个包含当前时间的HTML页面:




from django.http import HttpResponse
from django.views.generic.base import View
from datetime import datetime
 
# 使用函数视图
def current_datetime(request):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return HttpResponse("<html><body>It is now %s.</body></html>" % now)
 
# 使用类视图
class CurrentDateTime(View):
    def get(self, request):
        now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        return HttpResponse("<html><body>It is now %s.</body></html>" % now)

在这个例子中,current_datetime函数是一个标准的Django函数视图,而CurrentDateTime类是一个Django类视图。两者都在重写的get方法中处理GET请求并返回当前时间。函数视图是通过一个简单的函数实现的,而类视图则是通过继承View基类并重写方法实现的。

2024-08-28



# 导入Django Autocomplete Light的必要组件
from autocomplete_light import shortcuts as autocomplete_light
 
# 注册模型Admin,以支持Autocomplete功能
@autocomplete_light.register('MyModelAdmin')
class MyModelAutocomplete(autocomplete_light.AutocompleteGenericBase):
    # 指定模型
    model = MyModel
    # 指定查询集的过滤器
    search_fields = ['field1__icontains', 'field2__icontains']
    # 指定在Autocomplete结果中显示的字段
    attrs = {'placeholder': 'Search for a mymodel...'}
 
# 注册函数,用于自定义Autocomplete结果列表的外观
@autocomplete_light.register('forward')
class ForwardAutocomplete(autocomplete_light.AutocompleteGenericBase):
    # 定义模型
    model = Forward
    # 定义搜索字段
    search_fields = ['name__icontains']
    # 定义额外的选项
    attrs = {'placeholder': 'Search for a forward...'}
 
# 注册函数,用于自定义Autocomplete结果列表的外观
@autocomplete_light.register('backward')
class BackwardAutocomplete(autocomplete_light.AutocompleteGenericBase):
    model = Backward
    search_fields = ['name__icontains']
    attrs = {'placeholder': 'Search for a backward...'}

这个示例代码展示了如何在Django项目中使用Autocomplete Light库来增强Django Admin的自动完成功能。代码中定义了三个Autocomplete类,每个类对应一个Django模型,并指定了搜索字段和其他选项。这样,在Django Admin界面中使用这些模型时,用户可以通过输入来过滤和自动完成相关记录。

2024-08-28

在Django中使用JWT(JSON Web Tokens),可以选择djangorestframework-simplejwt库,这是一个基于PyJWT的库,专门用于Django REST框架中提供Token认证服务。

首先,需要安装这个库:




pip install djangorestframework-simplejwt

然后,在Django的settings.py文件中配置:




# settings.py
 
# Simple JWT
import datetime
 
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': datetime.timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': datetime.timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,
 
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
 
    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
 
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
 
    'JTI_CLAIM': 'jti',
 
    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': datetime.timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': datetime.timedelta(days=1),
}

接下来,在urls.py中添加Token的路由:




# urls.py
 
from django.urls import path, include
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)
 
urlpatterns = [
    # ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

最后,在需要认证的视图中使用jwt_required装饰器:




# views.py
 
from rest_framework_simplejwt.decorators import jwt_required
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
 
@jwt_required
def get_current_user(request):
    user = request.user
    return Response({'email': user.email, 'id': user.id}, status=status.HTTP_200_OK)

使用TokenObtainPairView.as_view()TokenRefreshView.as_view()可以提供登录和刷新Token的接口。使用jwt_required装饰器可以保护视图,要求请求提供有效的Token。

2024-08-28



from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.contrib.auth.models import User
 
# 注册User模型到admin站点,使用AuthUserAdmin
admin.site.register(User, AuthUserAdmin)

这段代码示例展示了如何在Django的admin站点中注册Auth应用的User模型,使得我们可以在admin后台管理用户数据。这是通过继承UserAdmin类并进行相应的注册来实现的。这样,我们就可以在admin界面对用户数据进行增删改查操作,提高了用户管理的便捷性。

2024-08-28

Django是一个开放源代码的Web应用框架,用Python编写。它最初是为了简化开发者的编程工作,加快开发速度而建立的。

以下是一些Django的基本使用方法:

  1. 创建一个新的Django项目:



django-admin startproject myproject
  1. 运行Django项目:



python manage.py runserver
  1. 创建一个新的应用:



python manage.py startapp myapp
  1. 数据库迁移:



python manage.py makemigrations myapp
python manage.py migrate
  1. 创建管理员用户:



python manage.py createsuperuser
  1. 创建模型(在app的models.py文件中定义):



from django.db import models
 
class MyModel(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
  1. 定义视图(在app的views.py文件中):



from django.http import HttpResponse
 
def home(request):
    return HttpResponse("Hello, World. I am Django.")
  1. 定义URLs(在项目的urls.py文件中):



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

以上只是Django框架的一些基本概念和使用方法,Django还有很多高级功能,如中间件、模板、表单等,都是开发Web应用的重要组成部分。

2024-08-28

在Django中,模板是一种文本,用于描述HTML的显示结果,模板包含固定不变的部分和可变的部分。模板引擎的主要作用就是使用变量的内容替换模板中的特定标记。

在Django中,模板语言有以下特点:

  1. 模板继承:可以创建可重用的模板块,然后将它们插入到子模板中。
  2. 自动HTML转义:在模板中输出变量时,Django会自动转义HTML标记,以防止跨站脚本攻击(XSS)。
  3. 模板标签和过滤器:可以使用标签和过滤器来改变模板的显示结果。
  4. 静态文件处理:可以在模板中使用静态文件。
  5. 自动转换:Django模板可以自动将Python的一些常用类型转换为字符串,以便在模板中显示。

下面是一个简单的Django模板示例:




<!-- templates/hello.html -->
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    <h1>{{ greeting }}</h1>
    <p>{{ content }}</p>
</body>
</html>

在这个例子中,{{ greeting }}{{ content }}是模板变量,它们将被Django在渲染模板时使用的实际值替换。

在Django视图中,你可以使用Django提供的模板渲染功能来传递上下文到模板:




# views.py
from django.shortcuts import render
 
def hello_world(request):
    context = {'greeting': 'Hello, World!', 'content': 'This is a simple example.'}
    return render(request, 'hello.html', context)

在这个例子中,render函数负责将上下文(包含两个键:'greeting'和'content')传递给模板,并返回渲染后的HTML。

2024-08-27

在Django中,视图类是通过继承django.views.View类来创建的。视图类中的方法会对应处理特定的HTTP请求方法(如GET、POST等)。

以下是一个简单的Django视图类示例,它处理GET请求来显示一个简单的页面:




from django.http import HttpResponse
from django.views import View
 
class HomePageView(View):
    def get(self, request):
        return HttpResponse("Welcome to the Home Page!")

在这个例子中,当用户访问这个视图对应的URL时,HomePageView.get()方法会被调用,并返回一个包含响应内容的HttpResponse对象。

要使用这个视图类,你需要在urls.py文件中将其添加到URL配置中:




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

这样配置后,当用户访问网站根目录时,Django会实例化HomePageView并调用其get()方法来响应请求。

2024-08-27



# 导入Django Cron的模块
from django_cron import CronJob, Schedule
 
# 定义一个CronJob类,用于执行定时任务
class ExampleCronJob(CronJob):
    # 定义任务执行的时间表,例如每5分钟执行一次
    schedule = Schedule(datetime.timedelta(minutes=5))
    # 定义任务的代码
    code = 'yourapp.cron.my_custom_job'
 
    def do(self):
        # 这里写你的定时任务逻辑
        print("定时任务执行中...")
        # 执行你需要的操作,比如数据处理、邮件发送等
 
# 注册定时任务
cron_jobs = [
    ExampleCronJob,
    # 可以添加更多的CronJob
]

这个例子展示了如何在Django应用中定义一个简单的定时任务。首先,我们从django_cron导入必要的模块。然后,我们定义了一个继承自CronJob的类,并设置了任务执行的时间表。在do方法中,我们编写了任务要执行的代码。最后,我们定义了一个包含这个任务的列表,以便在Django项目中注册并运行这个定时任务。