首页 > 其他分享 >路飞后台

路飞后台

时间:2023-03-02 20:33:13浏览次数:27  
标签:浏览器 verbose models name 路飞 后台 import 请求

后台主页模块设计

1.首页要写哪些接口
    轮播图接口
    推荐课程接口

2.创建首页app
    在apps文件夹下执行
    python ../../manage.py  startapp home
    
3.创建轮播图表 Banner
    1.在utils下新建common_model.py
        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  # 只用来继承,不用来在数据库创建
                
    2.在home APP中的models.py创建表
        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
            
    3.迁移
        python manage.py makemigrations
		python manage.py migrate

轮播图接口

视图

from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
from .models import Banner
from .serializer import BannerSerializer
from utils.common_response import APIResponse


class BannerView(GenericViewSet, ListModelMixin):
    queryset = Banner.objects.filter(is_delete=False, is_show=True).order_by('orders')
    serializer_class = BannerSerializer

    def list(self, request, *args, **kwargs):
        res = super().list(request, *args, **kwargs)
        return APIResponse(data=res.data)  # {code:100,msg:成功,data=[{},{}]}

序列化类

from rest_framework import serializers
from .models import Banner


# Form类和ModelForm的区别

class BannerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Banner
        fields = ['id', 'image', 'title', 'link']

路由

from rest_framework.routers import SimpleRouter
from . import views

router = SimpleRouter()
# 访问 http://127.0.0.1:8000/api/v1/home/banner   ---->get 请求就可以查询所有轮播图
router.register('banner', views.BannerView, 'banner')

urlpatterns = [

]
urlpatterns += router.urls

录数据

后台管理使用Django的admin,使用simpleui渲染
1.安装
    pip install django-simpleui
2.注册app
3.在app下的admin.py中注册
    from .models import Banner
    admin.site.register(Banner)
4.录数据
    http://127.0.0.1:8000/admin

跨域问题详解

前端发送ajax请求到后端会有跨域的拦截,这主要是由于同源策略的存在
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
  	-请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.
    -发送ajax请求的地址,必须跟浏览器上的url地址处于同域上 域[域名,地址,端口,协议]
    -请求成功,数据库返回,但是浏览器拦截
    
解决跨域问题我们可以使用CORS,就是跨域资源共享,它是一个后端技术,在响应头中加入固定的头
CORS基本流程
    浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
浏览器发出CORS简单请求,只需要在头信息之中增加一个Origin字段。
浏览器发出CORS非简单请求,会在正式通信之前,增加一次HTTP查询请求,称为”预检”请求(preflight)。浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错

什么是简单请求,什么是非简单请求
	符合如下条件,就是简单请求
	1. 请求方法是以下三种方法之一:
        HEAD
        GET
        POST
    2.HTTP的头信息不超出以下几种字段:
        Accept
        Accept-Language
        Content-Language
        Last-Event-ID
        Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
    不符合上面的就是非简单请求
    
解决跨域问题
    1.自己写
        from django.utils.deprecation import MiddlewareMixin
        class CorsMiddleWare(MiddlewareMixin):
        def process_response(self,request,response):
            if request.method=="OPTIONS":  # 解决非简单请求的请求头
                #可以加*
                response["Access-Control-Allow-Headers"]="*"

                # 允许前端的地址,所有请求头允许
                response["Access-Control-Allow-Origin"] = "*"
                return response
    
    2.第三方模块
        # 第一步:安装
        pip install django-cors-headers
        # 第二步:配置app
            INSTALLED_APPS = [
                'corsheaders'
            ]

        # 第三步:配置中间件
            MIDDLEWARE = [
                'corsheaders.middleware.CorsMiddleware',
            ]
        # 第四步:在配置文件配置
        # 允许所有域
        CORS_ORIGIN_ALLOW_ALL = True
        # 允许的请求方式
        CORS_ALLOW_METHODS = (
            'DELETE',
            'GET',
            'OPTIONS',
            'PATCH',
            'POST',
            'PUT',
            'VIEW',
        )
        # 允许请求头中加的东西
        CORS_ALLOW_HEADERS = (
            'XMLHttpRequest',
            'X_FILENAME',
            'accept-encoding',
            'authorization',
            'content-type',
            'dnt',
            'origin',
            'user-agent',
            'x-csrftoken',
            'x-requested-with',
            'Pragma',
            'token',
        )

标签:浏览器,verbose,models,name,路飞,后台,import,请求
From: https://www.cnblogs.com/zyg111/p/17173374.html

相关文章