当前位置: 首页 > wzjs >正文

绵阳新农网的网站是哪个公司做的网页开发用什么软件

绵阳新农网的网站是哪个公司做的,网页开发用什么软件,怎么做网站站长视频,想自己建个网站前言 在掌握了Django基础开发后,如何构建更强大、更专业的Web应用?本文将带你深入Django的三大高级特性:allauth用户认证系统、DRF(Django REST framework)API开发,以及Celery异步任务处理。这些技术栈是构…

前言

在掌握了Django基础开发后,如何构建更强大、更专业的Web应用?本文将带你深入Django的三大高级特性:allauth用户认证系统、DRF(Django REST framework)API开发,以及Celery异步任务处理。这些技术栈是构建现代Web应用的利器,也是面试中的高频考点。

一、Django-allauth:企业级用户认证解决方案

1.1 allauth简介

Django-allauth是一个集成了注册、认证、第三方登录等功能的综合解决方案。相比Django自带的auth模块,allauth提供了更全面的功能:

  • 多种注册方式(邮箱、用户名)

  • 第三方账号登录(Google、GitHub、微信等)

  • 邮箱验证

  • 密码重置

  • 账户管理

1.2 快速集成allauth

安装:

pip install django-allauth

配置settings.py:

INSTALLED_APPS = [...'django.contrib.sites','allauth','allauth.account','allauth.socialaccount',# 第三方提供商,如:'allauth.socialaccount.providers.github','allauth.socialaccount.providers.wechat',
]AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend','allauth.account.auth_backends.AuthenticationBackend',
]SITE_ID = 1# 配置登录选项
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'

URL配置:

from django.urls import include, pathurlpatterns = [path('accounts/', include('allauth.urls')),
]

1.3 自定义用户模型

尽管allauth可以与默认User模型配合使用,但建议自定义用户模型:

from django.contrib.auth.models import AbstractUser
from django.db import modelsclass CustomUser(AbstractUser):avatar = models.ImageField(upload_to='avatars/', blank=True)bio = models.TextField(max_length=500, blank=True)def __str__(self):return self.email

在settings.py中指定:

AUTH_USER_MODEL = 'yourapp.CustomUser'

1.4 第三方登录配置示例(GitHub)

  1. 在GitHub开发者设置中创建OAuth应用

  2. 配置settings.py:

SOCIALACCOUNT_PROVIDERS = {'github': {'APP': {'client_id': 'your-client-id','secret': 'your-client-secret','key': ''},'SCOPE': ['read:user', 'user:email'],}
}

二、Django REST framework:构建专业API

2.1 DRF核心概念

Django REST framework(DRF)是构建Web API的强大工具包,提供:

  • 序列化(Serialization)

  • 视图集(ViewSets)

  • 路由(Routers)

  • 认证与权限

  • 分页

  • 过滤

2.2 快速开始

安装:

pip install djangorestframework

基础配置:

INSTALLED_APPS = [...'rest_framework','rest_framework.authtoken',  # 如果需要token认证
]REST_FRAMEWORK = {'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.SessionAuthentication','rest_framework.authentication.TokenAuthentication',],'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated',],'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 10
}

2.3 创建API示例

1. 定义模型:

from django.db import models
from django.contrib.auth import get_user_modelUser = get_user_model()class BlogPost(models.Model):author = models.ForeignKey(User, on_delete=models.CASCADE)title = models.CharField(max_length=200)content = models.TextField()created_at = models.DateTimeField(auto_now_add=True)updated_at = models.DateTimeField(auto_now=True)def __str__(self):return self.title

2. 创建序列化器:

from rest_framework import serializers
from .models import BlogPostclass BlogPostSerializer(serializers.ModelSerializer):author = serializers.ReadOnlyField(source='author.username')class Meta:model = BlogPostfields = ['id', 'author', 'title', 'content', 'created_at', 'updated_at']read_only_fields = ['created_at', 'updated_at']

3. 构建视图:

from rest_framework import viewsets, permissions
from .models import BlogPost
from .serializers import BlogPostSerializerclass BlogPostViewSet(viewsets.ModelViewSet):queryset = BlogPost.objects.all()serializer_class = BlogPostSerializerpermission_classes = [permissions.IsAuthenticatedOrReadOnly]def perform_create(self, serializer):serializer.save(author=self.request.user)

4. 配置路由:

from rest_framework.routers import DefaultRouter
from .views import BlogPostViewSetrouter = DefaultRouter()
router.register(r'posts', BlogPostViewSet)urlpatterns = [path('api/', include(router.urls)),path('api-auth/', include('rest_framework.urls')),
]

2.4 高级特性

自定义权限
from rest_framework import permissionsclass IsOwnerOrReadOnly(permissions.BasePermission):def has_object_permission(self, request, view, obj):if request.method in permissions.SAFE_METHODS:return Truereturn obj.author == request.user
过滤和搜索
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filtersclass BlogPostViewSet(viewsets.ModelViewSet):# ...filter_backends = [DjangoFilterBackend, filters.SearchFilter]filterset_fields = ['author']search_fields = ['title', 'content']

三、Celery:异步任务处理

3.1 Celery简介

Celery是一个分布式任务队列,用于处理耗时操作,如:

  • 发送邮件

  • 图片处理

  • 数据分析

  • 定时任务

3.2 Celery与Django集成

安装:

pip install celery redis  # 使用Redis作为broker

项目结构:

yourproject/__init__.pycelery.pysettings.pyurls.py

创建celery.py:

import os
from celery import Celeryos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yourproject.settings')app = Celery('yourproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

在__init__.py中添加:

from .celery import app as celery_app__all__ = ['celery_app']

配置settings.py:

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'

3.3 创建异步任务示例

1. 创建tasks.py:

from celery import shared_task
from django.core.mail import send_mail
from django.conf import settings@shared_task
def send_welcome_email(user_email, username):subject = f'Welcome {username}!'message = 'Thank you for registering on our site.'send_mail(subject,message,settings.DEFAULT_FROM_EMAIL,[user_email],fail_silently=False,)

2. 在视图中调用:

from .tasks import send_welcome_emaildef register_view(request):# 注册逻辑...send_welcome_email.delay(user.email, user.username)# 立即返回响应,邮件将在后台发送

3.4 定时任务(Celery Beat)

配置settings.py:

from celery.schedules import crontabCELERY_BEAT_SCHEDULE = {'send-weekly-report': {'task': 'yourapp.tasks.send_weekly_report','schedule': crontab(hour=8, minute=0, day_of_week=1),  # 每周一8点},
}

启动worker和beat:

celery -A yourproject worker -l info
celery -A yourproject beat -l info

四、三大组件协同工作示例

让我们看一个综合示例:用户通过API提交博客文章,系统异步处理文章内容(如提取关键词),完成后发送通知邮件。

1. 创建任务:

# tasks.py
@shared_task
def process_blog_post(post_id):from .models import BlogPostpost = BlogPost.objects.get(id=post_id)# 模拟耗时处理import timetime.sleep(10)# 提取关键词(简化示例)from collections import Counterwords = post.content.lower().split()common_words = Counter(words).most_common(5)# 更新文章post.keywords = ', '.join([w[0] for w in common_words])post.save()# 发送通知send_notification_email.delay(post.author.email,f'Your post "{post.title}" has been processed',f'Keywords extracted: {post.keywords}')

2. 修改视图:

# views.py
class BlogPostViewSet(viewsets.ModelViewSet):# ...def perform_create(self, serializer):instance = serializer.save(author=self.request.user)process_blog_post.delay(instance.id)  # 异步处理

五、性能优化与最佳实践

  1. allauth优化:

    • 使用缓存存储频繁访问的认证数据

    • 限制第三方登录提供商的权限范围

    • 实现JWT认证替代session

  2. DRF优化:

    • 使用select_related/prefetch_related优化查询

    • 实现分页避免大数据量返回

    • 使用SerializerMethodField处理复杂字段

  3. Celery优化:

    • 为不同任务设置不同队列

    • 使用rate_limit控制任务频率

    • 监控任务执行情况(Flower工具)

结语

通过本文,你已经掌握了Django三大进阶技术:allauth用户认证系统、DRF API开发和Celery异步任务处理。这些技术能够帮助你构建功能完善、性能优异的现代Web应用。

在实际项目中,建议:

  1. 深入理解每个组件的原理

  2. 关注官方文档的更新

  3. 结合具体业务需求灵活运用

  4. 重视测试和监控

希望本文对你的Django进阶之路有所帮助!如果有任何问题,欢迎在评论区留言讨论。

http://www.dtcms.com/wzjs/369920.html

相关文章:

  • 前端开发 网站建设外链吧怎么使用
  • 网站建设问题大全软文素材网
  • 自己做坑人网站的软件阿里大数据分析平台
  • 做网站work什百度文库首页官网
  • 广州白云区今天最新消息山东seo费用多少
  • 如何购买网站网站域名在哪里查询
  • 网站制作上首页企业网站建设哪家好
  • 虚拟主机 网站镜像南昌百度推广公司
  • 福州网站设计软件公司seo神器
  • b2c网站流量品牌营销策划方案范文
  • 网站开发 卡片佛山关键词排名工具
  • 东营做网站优化的公司潍坊网站开发公司
  • 做企划的网站新东方培训机构官网
  • 国家住房和城乡建设部中国建造师网站今天最新新闻国内大事件
  • 网站被挂黑链怎么处理东营百度推广电话
  • 厦门建设网站哪家好最新军事动态
  • 佛山网站建设公司电话微信代运营
  • 现在网站建站的主流语言是什么网站制作河南
  • 网站备案和空间备案湖南优化推广
  • 厦门市建设工程质量安全协会网站企业网站的作用
  • 青岛做门户网站的什么是软文写作
  • 公司做网站计入什么科目优化人员配置
  • 网线制作步骤及方法七个步骤重庆高端网站seo
  • 一级a做爰网站外贸营销
  • 学什么可以做响应式网站合肥建站公司seo
  • 关键词排名是由什么决定的企业seo推广外包
  • 自己建设一个网站软件网络营销最基本的应用方式是什么
  • php动态网站开发教学视频网络推广费用计入什么科目
  • 创意福州网站建设广西网站建设制作
  • 阿里巴巴国际网站做网站可以吗淘大象关键词排名查询