首页 > 其他分享 >前端配置、跨域、扩写用户表、轮播图

前端配置、跨域、扩写用户表、轮播图

时间:2023-11-21 09:46:52浏览次数:24  
标签:扩写 verbose models django 跨域 import class 轮播

luffy项目前端配置

# 1 跟后端交互:axios
	cnpm install -S axios
	以后想发送ajax请求,必须导入,使用
    可以把axios放到vue实例中,以后任意组件中  this.$axios.get()
	main.js中加入
    import axios from 'axios'
	Vue.prototype.$axios = axios;

# 2 操作cookie: vue-cookies
	cnpm install -S vue-cookies
    import cookies from 'vue-cookies'
    Vue.prototype.$cookies = cookies;
# 3 ui库:elementui
    cnpm install -S element-ui
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';  // 全局都会有这个css的样式
    Vue.use(ElementUI);

    
    
# 4 去掉 标签的默认样式
    1 编写全局css
        assets/css/global.css
    2 main.js中导入
    import '@/assets/css/global.css'

# 5 全局配置文件
	# 写一个settings.js
    export  default {
        BASE_URL:'http://127.0.0.1:8000/'
    }
   	# main.js中
    import settings from "@/assets/js/settings";
	Vue.prototype.$setting = settings

去除默认样式

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font: inherit;
    vertical-align: baseline;
}

/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
    display: block;
}

body {
    line-height: 1;
}

ol, ul {
    list-style: none;
}

blockquote, q {
    quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
    content: none;
}

table {
    border-collapse: collapse;
    border-spacing: 0;
}

跨域问题

#1 前后端打通---出现CORS policy 错误

#2 跨域问题出现的原因,源自于浏览器的同源策略,同源策略问题只会出现在前后端分离的web项目中

#3 同源策略:
	同源策略(Same origin policy)是一种约定,约定了请求的url地址,必须与浏览器上的url地址处于同一域上,也就是域名、端口、协议相同,如果违背了这个协议,浏览器就会报错
    请求正常发送了,服务器也响应了,但是返回浏览器的时候,报错了,被浏览器的同源策略拦截了
    
#4 CORS(跨域资源共享)--->是一个后端技术-->后端只需要在响应头中加入固定的响应头,前端就不禁止了

#5 CORS请求分为两类(浏览器发请求之前会判断)
    -简单请求:
    	只发送一次请求,就是真正的请求
    -非简单请求:
    	先发送一个options的预检请求,服务端如果写了cors,再发送真正的请求,如果没写cors,浏览器就不会发送真正的请求,
        
#6 只要同时满足以下两大条件,就属于简单请求。
    # 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

自己解决跨域问题

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

使用第三方解决

# 1 下载
pip install django-cors-headers
# 2 注册app
INSTALLED_APPS = (
	...
	'corsheaders',
	...
)
# 3 加中间件
MIDDLEWARE = [  
	...
	'corsheaders.middleware.CorsMiddleware',
	...
]
# 4 配置文件
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'
)

后端数据库迁移

用户板块,用户表迁移

# 用户表,使用auth的user表,自己写
	-如果用的是auth的user表,必须在迁移之前,就定好,扩写的要写完
    
from django.db import models
from django.contrib.auth.models import AbstractUser
# 扩写auth的user表,新增两个字段
class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)
    # 需要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中注册
    INSTALLED_APPS = [
            'user',
        ]
    AUTH_USER_MODEL='user.User'
4 迁移命令 两条

后台主页功能

软件开发模式

# 1 瀑布开发模式
	-架构,数据库设计---》分任务开发(周期很长,可能半年)---》测试---》上线
    
# 2 敏捷开发(devops)
	-架构设计--》很多板块
    -开发某个版块,再设计相关板块的数据库   # 一周左右
    -开发某个板块
    -测试测试该板块
    -运维上线该板块
    
    -开发另一个版本
    
    
# 根据原型图,分析出首页需要配合俩接口
	-轮播图接口(要写)
    	-查询所有轮播图
    -推荐课程接口(暂时先不写)
    
    
# 设计表:
	轮播图表:Banner
	
# 写轮播图接口
	-查询所有轮播图

轮播图表

# 公共字段
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

轮播图接口

视图类

#### 轮播图接口
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin
from rest_framework.generics import ListAPIView
from rest_framework.viewsets import ViewSetMixin, GenericViewSet
from .models import Banner
from .serializer import BannerSerializer
from django.conf import settings

# class BannerView(ViewSetMixin,ListAPIView): # 自动生成路由
# class BannerView(ViewSetMixin,GenericAPIView,ListModelMixin): # 自动生成路由

class BannerView(GenericViewSet, ListModelMixin):  # 自动生成路由
    queryset = Banner.objects.filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
    serializer_class = BannerSerializer

序列化类

from rest_framework import serializers
from .models import Banner


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

路由

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

配置文件

# 导入用户配置
from .user_settings import *


### user_settings.py
# 用户自己配置,单独放到一个py文件中
BANNER_COUNT=3

# 后续可能还用别的配置

后台管理界面

# 1 下载simpleui--->app中注册
# 2 创建一个root用户,后台登录
# 3 后台登录,录入数据:admin中注册这个表
    -from django.contrib import admin
    -from .models import Banner
    -admin.site.register(Banner)
# 4 默认情况文件传到根路径下
	需要配置:以后照片都会放到meida文件夹下 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
# 5 接口中不带meida 路径的: 
	在配置文件中:
		MEDIA_URL = 'media/'   # 取出的文件地址,拼接上media这个目录
# 6 让前端能访问图片
	在主路由中配置:
        from django.contrib import admin
        from django.urls import path, include
        from django.conf import settings
        from django.views.static import serve
        urlpatterns = [
            path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
        ]

标签:扩写,verbose,models,django,跨域,import,class,轮播
From: https://www.cnblogs.com/chao0308/p/17845539.html

相关文章

  • 11.路由以及跨域
    路由跨域跨域限制在进行前后端联调的时候,可能会遇到下面这个报错:这个错误就是跨域问题,是发生在浏览器端的。浏览器中有一个同源策略,它是一个安全策略,用来限制源的交互。同源策略:是一种约定,它是浏览器核心也最基本的安全功能,它会阻止一个域的JS脚本和另外一个域的内容进行......
  • springboot解决跨域问题
    当看这个的时候应该就是遇到跨域问题了,下面是解决的代码`@ConfigurationpublicclassCorsConfig{//当前跨域请求最大有效时长。这里默认1天privatestaticfinallongMAX_AGE=24*60*60;@BeanpublicCorsFiltercorsFilter(){UrlBasedCorsConfigurationSo......
  • AJAX跨域代理机制实现原理解析------AJAX
    httpClient发送packagecom.bjpowernode.httpClient;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.cl......
  • Spring Boot 跨域访问
    出于安全的考虑,浏览器会禁止Ajax访问不同域的地址,在现如今微服务横行的年代,跨域访问是非常常见的。W3C的CORS(Cross-origin-resource-sharing)规范中也已经允许跨域访问,并被主流浏览器所支持,它们包括:Chrome3+;Firefox3.5+;Opera12+;Safari4+;IE8+;如何在SpringBoot......
  • go语言解决跨域的问题图片显示问题
    来源:http://www.shanhubei.com/archives/2838.html直接上代码packagemainimport("fmt""io/ioutil""net/http")//获取C的图片数据funcReadImgData(urlstring)[]byte{resp,err:=http.Get(url)iferr!=nil{......
  • 用JS实现简单的新闻向上轮播效果
    最近在项目中遇到一个需求,就是实现一个功能,具体内容就是写一个类似轮播的功能,有限条标题,循环轮播。首先准备一个div,里边设置好要展示的内容divclass="panelline1"style="overflow:hidden"><h2>新闻动态</h2><divclass="app"><ahref="https://w......
  • 在Java中实现跨域(Cross-Origin Resource Sharing, CORS)
    在Java中实现跨域(Cross-OriginResourceSharing,CORS)主要涉及到在服务器端设置HTTP响应头,以允许来自不同源的客户端请求。下面是一些常用的方法来实现跨域:1.Servlet过滤器你可以创建一个过滤器(Filter)来添加必要的HTTP头。这种方法适用于所有基于Servlet的应用程序,如纯Servlet......
  • 直播平台制作,ViewPager自动轮播,手指按住停止轮播
    直播平台制作,ViewPager自动轮播,手指按住停止轮播对viewpager做一个触摸监听即可。然后判断下up和down事件 //通过监听onTouch事件,设置一个标签isLoop;手指按下时isLoop=false,手指抬起后isLoop=true;    mViewPager.setOnTouchListener(newView.OnTouchListener(......
  • 深入跨域 - 从初识到入门
    前言跨域这两个字就像一块狗皮膏药一样黏在每一个前端开发者身上,无论你在工作上或者面试中无可避免会遇到这个问题。如果在网上搜索跨域问题,会出现许许多多方案,这些方案有好有坏,但是对于阐述跨域的原理和在什么情况下需要用什么方案,缺少系统性的说明。大家在工作中可能因为大佬们......
  • 正确配置 Spring Boot Security 跨域请求(CORS)
    如果SpringBoot项目引入SpringSecurity组件,单独声明CorsConfigurationSourceBean并不起作用,这是由于CORS预检请求不含SessionID而请求首先被SpringSecurity处理并拒绝导致的。因此,必须明确地配置SpringSecurity跨域参数以便正常处理跨域请求,下面是一个配置示例......