路飞学城 之 基础配置

一、项目需求

1、五大需求如下

2、环境配置

项目创建

补充:

导出项目依赖 pip freeze

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# pip freeze   > requirement.txt
 
# cat requirement.txt
asgiref==3.7.2
cffi==1.16.0
cryptography==41.0.4
Django==3.2.12
django-cors-headers==4.2.0
django-simpleui==2023.8.28
djangorestframework==3.14.0
Pillow==10.0.1
pycparser==2.21
PyMySQL==1.1.0
pytz==2023.3.post1
sqlparse==0.4.4
typing_extensions==4.8.0

二、封装logger、封装全局异常、封装Response、后台数据库创建

1、封装logger

2、封装全局异常

补充:查找drf的配置,照着写

 3、封装Response

4、后台数据库创建

三、luffy前端配置

1、安装axios、cookie、elementui,全局配置使用

去除标签的默认样式

CSS Tools: Reset CSS (meyerweb.com)

2、三个组件

Banner.vue 轮播图组件 

Header.vue 组件

Footer.vue 组件

3、前端首页

轮播图,ElmentUI 叫走马灯 组件 | Element

推荐课程 :卡片 组件 | Element

四、跨域问题

1、前端请求的url地址必须与浏览器上的url地址相同(包括端口、域名、协议等),否则会发生跨域问题

2、自己解决跨域

定义一个中间件 common_middleware

1
2
3
4
5
6
7
8
9
10
11
from django.utils.deprecation import MiddlewareMixin
class CORSMiddleWare(MiddlewareMixin):
    def process_response(self, request, response):
        # 简单请求
        response['Access-Control-Allow-Origin'] = '*'  # 允许所有客户端
        # 非简单请求
        if request.method == 'OPTIONS':
            # res['Access-Control-Allow-Methods'] = 'DELETE,PUT'
            response['Access-Control-Allow-Methods'] = '*'
            response['Access-Control-Allow-Headers'] = '*'
        return response

settings 引入

1
2
3
MIDDLEWARE = [
     'utils.common_middleware.CORSMiddleWare'
]

3、第三方解决跨域

五、 后端数据库迁移

1、用户板块,用户表迁移

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 用户表,使用auth的user表,自己写
    -如果用的是auth的user表,必须在迁移之前,就定好,扩写的要写完
     
# 咱们用户表,用的就是基于auth的user表,扩写,咱们先写用户表
    1 创建用户app
    python ../../manage.py startapp user
    2 创建用户表,models.py中
        from django.contrib.auth.models import AbstractUser
        class User(AbstractUser):
            # 扩写,加入手机号,加入头像
            mobile = models.CharField(max_length=11, unique=True)
            # 需要pillow包的支持  pip install pillow
            icon = models.ImageField(upload_to='icon', default='icon/default.png')
            class Meta:
                db_table = 'luffy_user'
                verbose_name = '用户表'
                verbose_name_plural = verbose_name
 
            def __str__(self):
                return self.username
             
     3 dev.py中注册
    # 注册user app
        INSTALLED_APPS = [
                'user',
            ]
        AUTH_USER_MODEL='user.User'  # 应用名.表名
     4 迁移命令 两条

六、后台主页功能

1、软件开发模式

1
2
3
4
5
6
7
8
9
10
11
# 1 瀑布开发模式
    -架构,数据库设计---》分任务开发(周期很长,可能半年)---》测试---》上线
     
# 2 敏捷开发(devops)
    -架构设计--》很多板块
    -开发某个版块,再设计相关板块的数据库   # 一周左右
    -开发某个板块
    -测试测试该板块
    -运维上线该板块
     
    -开发另一个版本

2、轮播图表

常用的字段写成公用的,使用继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from django.db import models
 
class BaseModel(models.Model):
    # 是否显示,记录插入时间,最后修改时间,是否删除(软删除),排序
    # 课程表,也需要这些字段
    created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    updated_time = models.DateTimeField(auto_now=True, verbose_name='最后更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
    is_show = models.BooleanField(default=True, verbose_name='是否上架')
    orders = models.IntegerField(verbose_name='优先级')
 
    class Meta:
        abstract = True  # 这个表,只用来继承,不会再数据库生成表
 
 
from utils.common_model import BaseModel
class Banner(BaseModel):
    title = models.CharField(max_length=16, unique=True, verbose_name='名称')
    image = models.ImageField(upload_to='banner', verbose_name='图片'# 地址,存放轮播图的地址
    link = models.CharField(max_length=64, verbose_name='跳转链接')
    info = models.TextField(verbose_name='详情'# 也可以用详情表,宽高出处
 
    class Meta:
        db_table = 'luffy_banner'
        verbose_name_plural = '轮播图表'
 
    def __str__(self):
        return self.title

补充:这里的is_delete字段,软删除

MySQL 数据库中,硬删除(也称为物理删除)指的是直接从数据库表中删除数据行,硬删除操作可能导致数据库索引失效

3、轮播图接口

视图类

轮播图接口除了返回序列化后的id、image、link,还要返回状态码、msg,继承APIResponse重写一个list

1
2
3
4
5
6
7
from rest_framework.mixins import ListModelMixin
from utils.common_response import APIResponse
 
class CommonListModelMixin(ListModelMixin):
    def list(self, request, *args, **kwargs):
        res = super().list(request, *args, **kwargs)
        return APIResponse(result=res.data)

轮播图接口

1
2
3
4
5
6
7
8
9
from rest_framework.viewsets import ViewSetMixin, GenericViewSet
from . import models
from .serializer import BannerSerializer
from django.conf import settings
from utils.common_mixin import CommonListModelMixin
 
class BannerView(GenericViewSet, CommonListModelMixin):  # 自动生成路由
    queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
    serializer_class = BannerSerializer

4、序列化类

1
2
3
4
5
6
7
8
from rest_framework import serializers
from .models import Banner
 
 
class BannerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Banner
        fields = ['id', 'image', 'link']

5、子路由  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from django.contrib import admin
from django.urls import path
from home import views  # pycharm报错,但实际上不报错 ,只需要把加入到环境变量的路径都做成source root即可
from rest_framework.routers import SimpleRouter
from .views import BannerView
 
router = SimpleRouter()
# 127.0.0.1:8080/api/v1/home/banner/--- get
router.register('banner', BannerView, 'banner')
 
urlpatterns = [
 
]
urlpatterns += router.urls

6、配置文件

1
2
3
4
5
6
7
8
9
# dev配置 导入用户配置
from .user_settings import *
 
 
### user_settings.py
# 用户自己配置,单独放到一个py文件中
BANNER_COUNT=3
 
# 后续可能还用别的配置

7、补充

1
2
3
# app 后端---》app一打开---》广告页---》可以滑动---》点击广告页---》一种浏览器打开页面跳转,一种情况打开一个他们app内的页面
 
# 原理就是轮播图接口

七、后台管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 任何项目,都会有后台管理
# 使用 django+vue ---》写---》
# django的admin做后台管理---》simpleui美化
 
 
# 1 下载simpleui---》app中注册
# 2 创建一个root用户,后台登录
# 3 后台登录,录入数据:admin中注册这个表
# 4 默认情况文件传到根路径下
    需要配置:以后都会放到meida文件夹下 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
     
# 5 接口中不带meida 路径的: 配置文件中
    MEDIA_URL = 'media/'   # 取出的文件地址,拼接上media这个目录
# 6 前端能访问图片
      path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),

八、短信验证登录功能

1、登录注册页面分析

1
2
3
4
5
6
# 用户板块需要写的接口
1 用户名密码登录(多方式登录)
2 获取手机验证码接口
3 手机号+验证码登录
4 注册接口
5 验证手机号是否存在接口

2、验证手机号是否存在接口

user.view

开启子路由

1
2
3
4
5
6
7
8
9
10
from rest_framework.routers import SimpleRouter
from .views import MobileView
 
router = SimpleRouter()
router.register('mobile', MobileView, 'mobile')
 
urlpatterns = [
 
]
urlpatterns += router.urls

验证

127.0.0.1:8000/api/v1/user/mobile/check_mobile/?mobile=‘手机号’

  

 

posted @   凡人半睁眼  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-10-07 heartbeat双主高可用

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示