【Django快速开发实战】(52~76)使用Django创建一个基础应用:职位管理系统

39 篇文章 1 订阅
36 篇文章 1 订阅

52 | 生产环境要注意哪些事项:生产环境的应用部署

在这里插入图片描述

单元测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
老师的testcase/test_views.py

from django.test import TestCase
from django.test import Client

from jobs.models import Job, JobTypes, Cities

class JobTests(TestCase):

    @classmethod
    def setUpTestData(cls):
        # Set up data for the whole TestCase
        cls.job = Job.objects.create(job_name="Java开发工程师", job_type=JobTypes[0][0], job_city=Cities[1][0], job_requirement="精通Java开发")
        

    def test1(self):
        # Some test using self.job
        pass


    def test_index(self):
        client = Client()
        response = client.get('/joblist/')
        self.assertEqual(response.status_code, 200)


    def test_detail(self):
        # 使用 TestCase.self.client 作为 HTTP Client:
        response = self.client.get('/job/1/')
        self.assertEqual(response.status_code, 200)

        job = response.context['job']
        self.assertEqual(job.job_name, JobTests.job.job_name)

我的testcase/test_views.py

from django.test import TestCase
from django.test import Client

from GAGA_meeting.models import project

class projectTests(TestCase):

    @classmethod
    def setUpTestData(cls):
        # Set up data for the whole TestCase
        cls.job = project.objects.create(project_name="MA", project_owner_name='season',)
        

    def test1(self):
        # Some test using self.job
        pass


    def test_index(self):
        client = Client()
        response = client.get('admin/')
        self.assertEqual(response.status_code, 200)


    def test_detail(self):
        # 使用 TestCase.self.client 作为 HTTP Client:
        response = self.client.get('')
        self.assertEqual(response.status_code, 200)

        job = response.context['job']
        self.assertEqual(job.job_name, JobTests.job.job_name)

在这里插入图片描述

生产环境 Django 配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同步服务器:uWSGI与gunicorn功能类似,都需要与Nginx配合,选择一个即可。
异步服务器:Uvicorn(有异步views可用此服务器)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

53 | 应用水平扩展:使用负载均衡(待研究-Nginx配置)

应用水平扩展:使用Tengine 和负载均衡

在这里插入图片描述
在这里插入图片描述

最简单配置: 路由转发请求到 Gunicorn/uWSGI 服务

在这里插入图片描述

使用Tengine/Nginx 负载均衡

在这里插入图片描述

Tengine 的分流策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

54 | 让网站访问更快:使用CDN加速(待研究-Nginx配置)

为什么要使用CDN

在这里插入图片描述

CDN访问的两阶段

在这里插入图片描述

加速静态资源访问的两个方法

在这里插入图片描述

使用CDN的两种方式

在这里插入图片描述
在这里插入图片描述

55 | 让故障在第一时间被感知到:接入监控告警(待研究)

让故障第一时间被感知到:接入监控告警

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

告警趋势可视化: Prometheus & Grafana 概念介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Prometheus & Grafana 接入

在这里插入图片描述
https://github.com/korfuri/django-prometheus
在这里插入图片描述

56 | 生产环境中的安全:生产环境的安全设计

生产环境中的安全:生产环境的安全设计

在这里插入图片描述

防火墙的类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

57 | 生产环境中的安全:应用安全

防恶意密码攻击

在这里插入图片描述
https://django-simple-captcha.readthedocs.io/en/latest/usage.html
在这里插入图片描述
在这里插入图片描述

  • views.py代码来实现功能:连续失败过多则需要验证码页面
from django import forms
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import AuthenticationForm
from django.contrib import messages

from captcha.fields import CaptchaField # 导入模块
from django.shortcuts import render

from django.http.response import HttpResponseRedirect
from django.urls import reverse_lazy

from ratelimit.decorators import ratelimit

import logging

logger = logging.getLogger(__name__)

class CaptchaLoginForm(AuthenticationForm):
    # username = forms.CharField(label='用户名')
    # password = forms.CharField(widget=forms.PasswordInput, label='密码')
    captcha = CaptchaField(label='验证码')

max_failed_login_count = 3

@ratelimit(key='ip', rate='5/m', block=True)
def login_with_captcha(request):
    if request.POST:
        failed_login_count = request.session.get('failed_login_count', 0)

        # 没有连续的登陆失败, 使用默认的登陆页; 连续 n 次登陆失败, 要求输入验证码
        if failed_login_count >= max_failed_login_count :
            form = CaptchaLoginForm(data=request.POST)
        else:
            form = AuthenticationForm(data=request.POST)

        # Validate the form: the captcha field will automatically
        # check the input
        if form.is_valid():
            request.session['failed_login_count'] = 0
            # authenticate user with credentials
            user = authenticate(username=form.cleaned_data["username"], password=form.cleaned_data["password"])
            if user is not None:
                # attach the authenticated user to the current session
               login(request,user)
               return HttpResponseRedirect(reverse_lazy('admin:index'))
        else:
            failed_login_count += 1
            request.session['failed_login_count'] = failed_login_count
            logger.warning(" ----- failed login for user: %s, failed times:%s" %  (form.data["username"], failed_login_count) )
            if failed_login_count >= max_failed_login_count :
                form = CaptchaLoginForm(request.POST)
            messages.add_message(request, messages.INFO, 'Not a valid request')
    else:
        ## 没有连续的登陆失败, 使用默认的登陆页; 连续 n 次登陆失败, 要求输入验证码
        failed_login_count = request.session.get('failed_login_count', 0)
        if failed_login_count >= max_failed_login_count :
            form = CaptchaLoginForm(request.POST)
        else:
            form = AuthenticationForm()

    return render(request, 'login.html', {'form': form})
  • settings.py
INSTALLED_APPS = [
...
    'captcha',
]

在这里插入图片描述

应用访问限流

在这里插入图片描述
Rest Framework API限流
在这里插入图片描述
应用限流
https://django-ratelimit.readthedocs.io/en/stable/index.html
在这里插入图片描述
在这里插入图片描述

  • views.py增加@ratelimit装饰符(以限制IP方式限流,每分钟不超过5次)
@ratelimit(key='ip', rate='5/m', block=True)
def login_with_captcha(request):

58 | 生产环境中的安全:架构安全(待研究)

在这里插入图片描述

架构安全 -应用的部署架构

在这里插入图片描述

架构安全 – 密钥存储

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

59 | 生产环境中的安全:数据安全(待研究)

感觉就是HTTPS

SSL 证书的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

敏感数据加密

在这里插入图片描述

日志脱敏

在这里插入图片描述

60 | 生产环境中的安全:密码安全与业务安全

密码安全

在这里插入图片描述
在这里插入图片描述

  • django自带密码认证功能

# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

在这里插入图片描述

61 | 云环境中的部署:Docker容器的基础用法

容器的基础用法 – Docker 容器介绍

在这里插入图片描述
在这里插入图片描述

容器的基础用法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

62 | 云环境中的部署:如何像分发集装箱一样发布应用

用容器部署应用 Dockerfile

在这里插入图片描述
在这里插入图片描述

用容器部署应用 Docker compose

在这里插入图片描述

63 | 云环境中的部署:开发环境的容器化&构建小镜像

容器化 Django 应用 – 构建小镜像

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运行容器

在这里插入图片描述

64 | 云环境中的部署:什么时候需要容器编排

容器编排 – docker compose

在这里插入图片描述
在这里插入图片描述

容器编排 - Docker, compose 与 k8s

在这里插入图片描述

容器编排 – k8s 的架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我的实战https://blog.csdn.net/m0_46629123/article/details/126527984

65 | 云环境中的部署:阿里云上搭建Kubernetes集群(待研究-阿里云)

阿里云上搭建Kubernetes集群

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

66 | 云环境中的部署:管理监控容器中的Django应用(待研究-阿里云)

管理监控容器中的Django应用

就是安装Prometheus和Grafana
在这里插入图片描述
https://help.aliyun.com/document_detail/94622.html
在这里插入图片描述
在这里插入图片描述

67 | 云环境中的部署:应用日志收集与查询(待研究-阿里云)

应用日志收集与查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://help.aliyun.com/document_detail/87540.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

68 | 云环境中的持续集成:CI/CD的工作流程(待研究-阿里云)

使用Jenkins来做CICD

CI/CD的工作流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

69 | 云环境中的持续集成:CI/CD的基本使用(待研究-阿里云)

CI/CD的基本使用

在这里插入图片描述
在这里插入图片描述
https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

70 | 快速迭代的价值与挑战

快速迭代的价值与挑战

在这里插入图片描述
在这里插入图片描述

71 | 使用OOPD方法识别产品核心功能

使用OOPD方法识别产品核心功能

在这里插入图片描述
在这里插入图片描述

72 | 如何做技术方案设计与工作拆解

如何做技术方案设计与工作拆解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

73 | 如何保证交付质量和持续迭代

如何保证交付质量和持续迭代

在这里插入图片描述
在这里插入图片描述

74 | 如何更高效地寻求帮助?

如何更高效地寻求帮助

在这里插入图片描述
在这里插入图片描述

75 | 一名Hacker的成长之路

一名Hacker的成长之路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

76 | 结束语

课程回顾

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django是一个高效的Python Web框架,在实践中开发Django项目非常有意义。首先,我们需要了解Django的架构和基本功能。Django的核心是面向模型的Web应用程序,它使用SQLite、MySQL或PostgreSQL等数据库来存储数据。Django开发人员提供了许多工具和组件,如表单、URL路由、ORM等,使开发Web应用程序变得更加容易和快捷。 在开始Django项目开发之前,我们应该考虑以下几个问题: 1.需求分析:我们需要明确项目的目标,例如,我们是否要开发一个电子商务平台或社交网络应用程序。 2.设计数据库模型:在设计数据库模型时,我们应该考虑数据实体之间的关系,使用Django的ORM可以轻松地定义这些关系。 3.开发应用程序:我们可以开发多个应用程序,每个应用程序包含相关功能的模块。 在Django项目开发中,我们可以遵循以下步骤: 1.创建Django项目并设置好虚拟环境。 2.使用Django的ORM定义数据库模型,如用户模型、商品模型等。 3.定义URL路由和视图函数,使HTTP请求能够正确地映射到相应的视图函数。 4.编写适当的模板和静态资源,如CSS和JavaScript文件,使用户界面更美观。 5.编写测试用例并执行单元测试,确保应用程序正常工作。 6.调试和优化应用程序,确保应用程序具有良好的性能和可扩展性。 Django项目开发实战需要更好的编程技能和经验,但是一旦我们了解了Django的架构和基本功能,我们可以使用其强大的工具和组件轻松地开发大型Web应用程序。 ### 回答2: Django 是一个高效、灵活的 Python Web 框架,成熟的开发社区和丰富的资源库广受欢迎。本着实战主义的精神,我们写一篇文章介绍 Django 项目开发实战。 首先,我们需要了解 Django基础结构和设计模式。Django 采用了 MVC(Model-View-Controller)的设计思想,但 Django 的实现方式是 MVT(Model-View-Template)模式。该模式将视图拆分为视图和模板两个部分,便于开发和维护。其次,Django 遵循 DRY(Don't Repeat Yourself)原则,通过 ORM(Object-Relational Mapping)模式将数据库操作转化为对象操作,使得数据库的操作更加高效、简洁,减少重复代码和代码维护工作。 接下来,我们需要按照开发流程搭建 Django 项目。通过使用 Django 自带的命令行工具,我们可以创建项目、应用、模型和视图等文件。在开发和测试过程中,我们可以使用 Python 自带的虚拟环境管理工具 pipenv,创建独立的虚拟环境,避免依赖冲突和环境污染,同时可以加快项目部署。 在项目完成之后,我们需要进行部署和维护。Django 的部署方式有多种,如使用 Apache、Nginx、Docker 等工具,根据项目需求进行选择。在维护过程中,需要注意数据库备份、定期清理无用数据、优化 SQL、升级 Django 版本等问题,以确保项目的高效性和稳定性。 总之,Django 项目开发实战需要熟练掌握 Django基础结构和设计模式,以及开发流程和部署维护过程中的注意事项。Django 作为一种 Python Web 框架,具有高效性、灵活性和可扩展性,适合大中小型 Web 项目的开发。 ### 回答3: Django是一个高效、灵活、丰富的Python Web框架,它具有强大的MTV架构,利用它可以快速构建高性能的Web应用程序。面对实际开发,我们往往需要依据业务构建Django项目,并且进行开发实战。 首先,我们需要在系统中预装Python和Django,并建立使用的数据库。接着,我们利用Django的核心特性建立项目框架,如利用命令行工具创建项目目录结构、迁移和建立模型等。 其次,我们需要完成视图、模板、URL路由等关键技术的学习与实践。其中,视图是处理请求和响应的核心,模板是实现页面展示的关键,URL路由则是将请求映射到对应视图的桥梁。 随后,我们需要利用Django的Admin管理系统开发后台,这让我们可以在不编写任何代码的情况下,轻松地创建、修改和删除数据模型,以及管理用户和组等重要数据。 最后,我们还需要考虑Django的安全性、性能、扩展性等实际应用问题。例如,如何进行身份认证、如何优化框架和应用的性能、如何扩展Django的功能等。 总之,Django项目开发实践需要学习和实践多种技术,也需要深入体验框架的各个方面。通过深入学习和实践,我们将能够开发出高性能、安全可靠、易于维护的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值