前台全局样式和js配置、后台主页模块接口、跨域问题详解,前后端打通、自定义配置、git介绍和安装、pycharm中配置git、svn,git ,github,gitee,gitlab

前台全局样式和js配置

image
body div 默认样式,统一去掉

global.css

body, h1, h2, h3, h4, h5, h6, p, table, tr, td, ul, li, a, form, input, select, option, textarea {
    margin: 0;
    padding: 0;
    font-size: 15px;
}

a {
    text-decoration: none;
    color: #333;
}

ul {
    list-style: none;
}

table {
    border-collapse: collapse;
}

image

image

settings.js

export default {
    BASE_URL:'http://127.0.0.1:8000/'
}

main.js

//5 去掉所有标签默认样式
import '@/assets/css/global.css'

// 6 全局配置
import settings from "@/assets/js/settings";
Vue.prototype.$settings=settings

后台主页模块接口

补充:https://zhuanlan.zhihu.com/p/444741981
无论是瀑布式开发、敏捷开发还是DevOps,整个流程都分为设计、开发、测试和部署四个部分,只不过各个部分的开始和结束时间节点不同而已!

'''瀑布开发'''
瀑布式开发是早期被广泛采用的软件开发模型,要求有明确的需求,大家按照需求一步步做好规划,每一阶段工作的完成是下一阶段工作开始的前提,每一阶段都要进行严格的评审,保证各阶段的工作做得足够好时才允许进入下一阶段,它适用于需求明确的项目。其最大的风险是,当产品研发完成后, 到了产品测试阶段如果发现了问题 ,或者发现其无法满足市场需求, 那么就需要重新开发,甚至需要重新规划产品。

'''敏捷开发'''
敏捷开发是一种以用户需求进化为核心、迭代、循序渐进的开发方法。首先把用户最关注的软件原型做出来并交付给用户,用户在实际场景中发现问题并给予反馈,研发人员快速修改弥补需求中的不足。上述过程不断迭代,直到用户满意。敏捷适用于需求不明确、创新性或者需要抢占市场的项目,特别适合互联网项目。

'''DevOps'''
DevOps是一种软件开发实践,它将人员、流程和技术结合在一起,以交付持续的价值。该方法分为计划和跟踪、开发、生成和测试、交付以及监视和操作。DevOps 的独特之处在于开发、IT 运营、质量工程和安全团队协同工作,在发布新产品、版本或更新所涉及的所有任务中创造效率。

'''DevOps和敏捷'''
关于 DevOps 和敏捷,最重要的一点是它们不是互斥的。DevOps 是一种文化,促进所有参与软件开发和维护的参与者之间的协作。敏捷可以被描述为一种开发方法,旨在需求不断变化的现实中维护工作效率和驱动发布。尽管 DevOps 和敏捷是不同的,但是如果将这两种方法结合使用,将会带来更高的效率和更可靠的结果。DevOps是敏捷的有效补充,是将运维纳入产品开发过程的思维方式,是敏捷开发方法论的升级,更强调自动化工具的实现与应用,以帮助实现软件的快速迭代。


-软件开发模式:
    -瀑布模式:bbs项目
    -敏捷开发:路飞,管理软件

-bbs项目:设计数据库---》全设计完了---》开始写项目

-路飞:写一块设计一块数据库

image
上图中可以清晰地看到,从瀑布式开发到敏捷开发再到DevOps,各个阶段的切换速度越来越快,瀑布式开发和敏捷开发的运维部署工作都是放到最后,而 DevOps 结合敏捷开发思想,将部署工作也敏捷起来。

创建一个app,写轮播图表

-python ../../manage.py startapp home

编写一个BaseMosel

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  # 虚拟表,只用来做继承,不在数据库生成

编写banner表

class Banner(BaseModel):
    # 图片地址,图片名,图片介绍,link地址
    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

数据迁移

 python manage.py makemigrations

 python manage.py migrate

轮播图接口编写

# 1 分路由---》home的app中新建urls.py
总路由:
	urlpatterns = [
		path('admin/', admin.site.urls),
		path('api/v1/home/', include('home.urls')),
		path('media/<path:path>', serve, kwargs={'document_root': settings.MEDIA_ROOT}),
	]
	
分路由:
	from . import views
	from rest_framework.routers import SimpleRouter
	router = SimpleRouter()
	router.register('banner', views.BannerView, 'banner')
	urlpatterns = [
	]
	urlpatterns += router.urls


# 2 视图函数中
	from rest_framework.viewsets import GenericViewSet
	# 获取所有
	from utils.views import CommonListModelMixin
	from rest_framework.response import Response

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

# 3 utils下的view.py 中
	from rest_framework.mixins import ListModelMixin
	from utils.response import APIResponse
	class CommonListModelMixin(ListModelMixin):
		def list(self, request, *args, **kwargs):
			res = super().list(request, *args, **kwargs)
			return APIResponse(result=res.data)

# 4 序列化类 serializer.py
	class BannerSerializer(serializers.ModelSerializer):
		class Meta:
			model = Banner
			fields = ['title', 'image', 'link']

# 5 录入数据 simpleui
    -下载,注册app,国际化
    -创建超级用户
    -录入数据

创建用户

python manage.py createsuperuser

image

simpleui页面修改

修改表名

image

修改App的名字

image

设置后台管理名字

image

录入数据

image
接口返回的数据
image

补充:软删除

如果不小心误删除数据时,并不是真的从数据库中将这条记录去除。防止用户误操作!

跨域问题详解,前后端打通

前后端交互会存在跨域问题

跨域问题出现的原因?

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.
比如:我在本地上的域名是127.0.0.1:8000,请求另外一个域名:127.0.0.1:8001一段数据
浏览器上就会报错,这个就是同源策略的保护,如果浏览器对javascript没有同源策略的保护,那么一些重要的机密网站将会很危险

解决问题

1 前端代理
2 nginx代理
3 CORS解决跨域

CORS解决跨域

CORS:跨域资源共享,后端技术,核心就是在响应头中加入数据,允许浏览器接受数据

CORS需要浏览器和服务器同时支持,IE浏览器不能低于IE10

CORS基本流程:
    浏览器将CORS请求分成两类:
    -简单请求(simple request)
    -非简单请求(not-so-simple request)

简单请求与非简单请求

'''简单请求'''
    浏览器发出CORS简单请求,只需要在头信息之中增加一个Acces-Control-Allow-Origin字段

'''非简单请求'''
    浏览器发出CORS非简单请求,会在正式通信之前,先发送一个options请求,称为”预检”请求。
    浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,如果运行,再发真正的请求

'''什么是简单请求,什么是非简单请求'''
    满足下面两种情况,就是简单请求:
        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

解决跨域,使用cors技术,在响应中写东西:如果自己写,需要写个中间件,每个请求都会走,在process_response中写入下面的代码即可:

def test(request):
    print(request.method)
    # 如果自己写,需要写个中间件,每个请求都会走,在process_response中写入下面的代码即可
    # 解决简单请求
    res=HttpResponse('ok')
    res['Access-Control-Allow-Origin']='*'
    # 解决非简单请求
    if request.method=='OPTIONS':
        res['Access-Control-Allow-Headers'] = 'Content-Type'
    return res

第三方模块,解决了这个问题,只需要集成进来,使用即可--->django

-第一步:安装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',
)

自定义配置

# 有些公共配置信息,放到单独一个配置文件中

# 新建一个common_settings.py
    # 轮播图显示的条数
    BANNER_COUNT = 3

# 在dev.py 中导入
from settings.common_settings import *

# 查询所有轮播图接口中
queryset = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]

git介绍和安装

# 后端,写了一个接口,完成了一个功能,在公司里,功能完成,要把代码提交到远程仓库

# 公司里协同开发,版本管理需要使用软件:svn,git


# 下载:安装在操作系统上
    -https://git-scm.com/downloads
    -一路下一步
    -任意位置点右键,如果有两个东西(【git gui here】  【git bash here】),表示安装完成

image

pycharm中配置git

# github , gitee开源软件,
#下载成zip,使用pycharm打开
# 使用pycharm直接拉下来,打开---》配置pycharm
    -settings中搜索git,把git安装可执行文件配置好

# 以后下载开源软件:vcs--->get from version contral--->填入路径---》clone下来即可

svn,git ,github,gitee,gitlab

# svn:版本管理软件,它是集中式的版本管理,必须有个svn的服务端,服务端如果过来,svn就用不了了
# git :版本管理软件,它是一个分布式的版本管理,每个客户端都可以作为服务端,即便服务端挂了,也能进行版本管理(本地管理)
# github:全球最大的开源远程git仓库,全球最大的开源仓库,git远程仓库
    -如果我要写开源软件,本地装git,把代码提交到github
    -python监控公司代码有没有被传到github
# gitee:中国最大的开源软件仓库   【私有仓库,花钱买空间】
# gitlab:公司内部的远程仓库,运维搭建维护
posted @ 2022-11-07 22:40  咩啊咩咩咩  阅读(124)  评论(0)    收藏  举报