精华内容
下载资源
问答
  • 2021-02-15 16:31:29

    前端后端分离,怎么解决SEO优化的问题呢?

    参考文章:

    (1)前端后端分离,怎么解决SEO优化的问题呢?

    (2)https://www.cnblogs.com/zhansu/p/7119569.html


    备忘一下。


    更多相关内容
  • 使用最流行的技术SpringBoot、SpringCloud、Shiro、Thymeleaf、Vue、Element、Bootstrap。绝对保障,买了不会亏,嘎嘎香,提取链接放在了txt文档里,放心好了,
  • Django:前端后端分离(数据交互)

    千次阅读 2019-08-25 16:17:06
    根据近期做的小项目,我觉得前后端分离就是后端负责对前端的请求做出响应,为其提供不同功能的接口,前端根据后端提供的接口设计界面,数据通常用json格式传输。一开始学习Django时常常是定义URL——编写视图——...

    一、交互的数据格式——JSON

    (摘录自百度百科——JSON

    json(JavaScript Object Notation):一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。

    语法规则:在JS语言中一切都是对象,任何支持的类型都可以通过JSON来表示。

    • 对象表示为键值对;
    • 数据由逗号分隔;
    • 花括号保存对象;
    • 方括号保存数组;

    JSON键值对是用来保存JS对象的一种方式,键名和值都用双引号(“”)包裹,中间隔着冒号(:)。

    表示对象:

    {"firstName": "Brett", "lastName": "McLaughlin"}

    表示数组:

    { 
    "people":[ 
        {
            "firstName": "Brett",            
            "lastName":"McLaughlin"        
        },      
        {        
            "firstName":"Jason",
        "lastName":"Hunter"
        }
        ]
    }

    二、ORM框架——简化对数据库的操作

    ORM是Object-Relational Mapping的简写,对象-关系映射。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。业务实体在内存中表现为对象,在数据库中表现为关系数据,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

    ORM框架为我们实际编程中操作、访问数据库提供了便利(有时候你甚至不知道自己用了这个框架,因为它不是像Django这样的框架,给程序员一个编程的流程)

    在python中,ORM框架做了如下映射:

    • 类——表;
    • 类属性——字段;
    • 类对象——数据库表里的一条数据

    面向对象编程中,当对象的信息发生变化时我们需要把对象的信息保存在关系数据将尽快中,这需要较多的SQL语句来操作数据库(往往有较多的重复),使用ORM可以大大减少重复性的对数据库操作的代码。

    字段类型有很多,不仅包括下面这些:

    • CharField(max_length=字符长度):字符串——可用作表示标题;
    • TextField:大文本字段,一般超过4000个字符时使用。
    • DateTimeField:日期时间,包含参数auto_now_add,表示当对象第一次被创建时自动设置当前时间,用于创建时的时间戳,它总是使用当前日期,默认为false;参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于最后一次修改的时间戳,它总是使用当前日期,默认为false。

    三、后端传递数据给前端

    1、后台传递数据给HTML

    传递的数据类型是一个字典,如:

    from django.shortcuts import render
    
    def example_for_view(request):
    
        data = {'keyname':value}
        
        return render(request,'urlpath',data)
          

    然后前端模板中可以用双花括号(括号内为变量名, 即字典数据的键名)获取数据,如:

    <p> {{ data }} </p>

    2、后台传递数据给JS代码

    这时需要注意,要传递的数据需要用json.dumps()处理,且前端使用这些数据时要用safe过滤器。

    ----后台----
    import json
    from Django.shortcuts import render
    
    def example(request):
        data = ['ele1','ele2']
        return render(request,'urlpath',{'keyname':json.dumps(data),})
    
    ----前端JS代码----
    var keyname= {{ keyname|safe }};

    3、采用HttpResponse

    上面的方式是直接渲染了一个新页面,也可以采用HttpResponse。HTTP协议的通信其实就是请求报文和响应报文之间的交互,其中请求报文是由客户端发出的,响应报文是由服务端生成的,HttpResponse便是Django里的响应报文。

    其实HttpResponse是一个类

    HttpResponse的介绍我是摘录自此博文

    HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None)

    • content:一个迭代器或者字符串。若为迭代器,则该函数立即处理这个迭代器,将其内容转成字符串并丢弃此迭代器。若需要迭代器到客户端的数据响应是数据流的形式则必须使用StreamingHttpResponse类代替。若该参数是一个字符串则这个字符串将作为相应报文的主体内容,也就是说如果这个参数是一个HTTP文档,那么这个文档将会放入响应报文的主体中最后在浏览器显示。
    • content_type:用于指定MIME类型(MIME:多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时浏览器会自动使用指定应用程序来打开)和编码。例如“text/html; charset=utf-8”,这两个值为默认值。
    • status:响应状态码。200表示成功。一般不需要改变这个参数除非有特殊要求。
    • reason:原因短语。客户端是根据状态码来判断响应是否成功,所以reason几乎没什么影响,一般只起提醒作用。默认的响应短语是200对于ok,404对应not found(状态码对应原因短语)。
    • charset:在response中被编码的字符集,若无给定(也就是为None)则会从content_type中提取,若提取不成功则DEFAULT_CHARSET的设定将被使用。
    ----后台----
    import json
    from Django.http import HttpResponse,JsonResponse
    
    def example(request):
        data = {'keyname':value}
    
        #这种形式下返回的数据仍是text/html类型
        return HttpResponse(json.dumps(data))
    
        #这种形式下返回的数据就是json类型了
        return HttpResponse(json.dumps(data),content_type="application/json")

    4、采用JsonResponse

    JsonResponse提供了返回json数据的简单方式,它是HttpResponse的子类,用来帮助用户创建JSON编码的响应。

    JsonResponse.__init__(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)

    • data:一般情况下是一个标准的python字典,与下面的参数safe配合使用时可以是其他数据类型的对象。
    • encoder:默认为django.core.serializers.json.DjangoJSONEncoder,用于序列化data。
    • safe:默认为True。若设置为False则可以传递任何对象给data进行序列化,否则只可以传递字典实例。
    • json_dumps_params:在1.9版本中新增,可以传递一个python标准的 json 库中,json.dump() 方法处理后的对象给它,用于生成一个响应。
    ----后台----
    import json
    from Django.http import HttpResponse,JsonResponse
    
    def example1(request):
        data = {'keyname':value}
    
        return JsonResponse(data)
    
    def example2(request):
        data = [ele1,ele2,...]
        
        return JsonResponse(data,safe=False)

    四、后端为前端提供接口

    Django框架下我们定义了URL模式,编写了特定的视图函数,使得不同的URL对应其视图,这样就是编写了一个接口,前端可以在代码里访问我们的URL(需要运行服务器)。这个接口可能需要接收前端发来的数据(参数)并返回前端需要的数据。

    一开始我们运行的是本地服务器,在测试项目时我们要同时开启前端服务器(端口号8080)和后端服务器(端口号8000),我们用浏览器登录前端服务器的端口,前端代码中设置浏览器发送请求到后端服务器。

    即:浏览器上访问127.0.0.1:8080

    五、Django的模型(model)

    1、model中的class Meta

    数据交互过程中我们经常需要查看数据库并对数据库中的数据进行必要的操作,而数据库存放的数据样式是由model中的类决定的,model中的类又经常带有Meta子类。

    我觉得Meta子类可以看作是在设置一个model的内在属性。其包含了很多功能不同的选项,我们可以通过设置这些选项来完善model的属性与功能,如:

    • app_label:只在“模型类不再默认的文件——models.py中”时使用,用于指定模型类属于哪个应用程序,app_label='appname'。
    • verbose_name:给模型类定义一个别名;
    • verbose_name_plural:给模型类定义别名的复数;
    • 其他选项可以参考这篇博文

    2、什么是model

    模型包含了我们的项目需要存储的数据的基本字段和属性,通常每个模型映射到一个数据库表。

    我们自定义的每个模型都是django.db.models.Model的子类,模型的每个属性代表一个数据库字段

    因此模型是与数据库表对应的,要在数据库中存储数据我们必须创建对应的模型。

    字段是模型最重要的一部分,每个字段都应该是Field类的实例,且都要采用一组特定于字段的参数。

    有一些可用于所有字段类型的通用参数:

    • null:null为True则将NULL在数据库中存储空值,默认为False;(数据库存储相关)
    • blank:blank为True则允许该字段为空,默认为False;(验证相关)
    • choices:一个包含多个元组的序列,若设置了这个则默认的表单小部件将是一个选择框。每个元组中第一个元素是将存储在数据库中的值

    3、为什么在这里提Model

    在前后端分离项目中,后端的任务就是对前端传来的数据进行操作或者为前端提供需要的数据,这经常需要我们利用数据库存取数据。model就是映射到数据库的表,决定了我们要存取什么数据到数据库,因此我觉得有必要提一下。

    六、总结

    根据近期做的小项目,我觉得前后端分离就是后端负责对前端的请求做出响应,为其提供不同功能的接口,前端根据后端提供的接口设计界面,数据通常用json格式传输。一开始学习Django时常常是定义URL——编写视图——编写模板,这需要在视图中采用render函数渲染界面,而在前后端分离中,负责后端的人只需要定义URL(提供接口),编写视图(如何处理前端发送过来的数据以及对前端的请求做出响应),视图的返回总是数据(如JsonResponse)。前端通过接口使用了视图的功能并接收其返回的数据,根据数据的内容再具体设计界面。

     

     

     

     

    展开全文
  • 本来后端 @JsonProperty(“food”) //错误的 @JsonProperty(“foods”) //正确的 将相应的字段传输给前端,但是前端,的确拿到json数据,但是相应的页面并没有被渲染,我之前有碰到这个情况,猜测可能是传输给前端...

    本来后端

    @JsonProperty(“food”) //错误的
    @JsonProperty(“foods”) //正确的

    将相应的字段传输给前端,但是前端,的确拿到json数据,但是相应的页面并没有被渲染,我之前有碰到这个情况,猜测可能是传输给前端的字段可能和渲染的字段不一样,导致出错不渲染,特地在刚开始看了下前端需要的字段,没错。后来的思路一直以为是代码写错了。导致在项目里检查好久,浪费时间。今天早上又看了一下请求,发现还是前端字段和后端字段不符合,所以导致出错。特地记录一下,为自己马虎粗心买单。

    展开全文
  • 前端后端分离的架构实例

    千次阅读 2017-03-25 12:52:30
    看了《系统架构:Web应用架构的新趋势—前端后端分离的一点想法》 这篇文章,对前端与后端的分离非常认同,这样做对于系统的维护是有相当大的好处的。正好自己也设计了一个这样的系统,于是把它拿出来,和大家讨论...

    http://www.cnblogs.com/ansiboy/p/3532686.html

    这里写图片描述
    看了《系统架构:Web应用架构的新趋势—前端和后端分离的一点想法》 这篇文章,对前端与后端的分离非常认同,这样做对于系统的维护是有相当大的好处的。正好自己也设计了一个这样的系统,于是把它拿出来,和大家讨论一下。这个架构,与其说是想出来,还不如说是我做系统总结出来的最佳实践。

    我们做的系统,前端的页面基本都是使用 JavaScript 的富户端页面,主要应用的框架用,jquery、jquery ui、knockout js、Durandal、另外,还有自己封装的一些 UI 组件,后端的主要采用到的技术有 OData、MVC、Linq to SQL 以及自己写的一个权限管理组件,数据库采用的是 SQL Server 2005。
    下面向大家介绍一下各模块的功能以及其划分的目的,我们先从用户界面看起吧
    一、关于前端的 dataProvider

    简单点说,就是一个给界面调用的数据访问层,很多人都人这样的疑问,在这里加一个数据访问层,是不是多余?只要你做的前端,你都会碰到下面这些问题:
    1、一个产品或者项目,前端与后端是同时进行了,这时候,根本没有后端的接口,甚至可以说,连个接口的定义都没有。作为前端开发人员,你如何去开展自己的工作?
    2、作为前端开发人员,你有没有碰到,因为后端的接口挂掉,导致你的工作没法继续做下去的情形?
    3、作为前端开发人员,往往免不了要和第三方的接口进行对接,你有没有碰到过,和你做对接的人员,突然因为项目紧,被抽走了,留给你的只有一堆需要 传N个参数,传了后接着出“对象为空”的异常呢?你根本不知道哪里参数传错了。面对这些接口,你除了破口大骂,得不到任何帮助。
    4、作为前端开发人员,你有没有试过,你向后端的开发组,要一个接口,他们需要讨论个几天,然后再花几天才能给你,给你之后,还不能用,又得再花几天时间调试呢?
    如果你向我一样,都曾经都碰过这些问题,你就不会怀疑这个 dataProvider 存在的必要了,有了这个 dataProvider,可以最大减少后端接口对前端开发的影响。下面是一个 dataProvider 的实例:
    复制代码
    var dataProvider = (function () {

    var fakeProvider = {
        countries: new Countries()
    };
    
    var realProvider = {
        countries: new JData.WebDataSource()
    };
    
    //下面的接口,根据情况二选一return fakeProvider; //这个是假的 dataProvider,从本地读return realProvider; //这个是真正 dataProvider,从接口读
    

    })();
    复制代码
    从上面可以看出来,这个 dataProvider 使用了工厂模式来创建,它有两个实例,fakeProvider和realProvider,fakeProvider是用来提供一些模拟数据,而 realProvider提供从接口读取出来的数据。当没有接口,或者接口挂掉,我们可以先从 fakeProvider 来读取数据。等接口好了,切换到 realProvider 。
    二、关于用户界面输入的验证

    1、数据的验证。用户在界面输入数据后,接着调用 dataProvider 里的接口对数据进行处理,但是在向服务端提交之前,得先对数据进行验证。那个这个验证如何进行呢?dataProvider先从服务端获实体的描述信息, 这些描述包括但不限于:主外键、属性的验证信息(比如是否可空),当然,这个实体信息是可以缓存起来,以便重用的。然后 dataProvider 再根据这个描述信息来对数据进行验证。
    2、错误信息的显示
    当验证到某一个属性不合法,验证信息的模块就在页面查找出对应输入控件,它是怎么查找的呢?比如说,Contry 的 Name 输入为空是不可以的。那它就先查找 id 为Coutry的元素,然后再Coutry元素下面再找id 或者 name 为 Name 的控件,如果找不到则直接弹窗显示错误信息。例如:

    三、关于后端使用 OData

    1、作为后端开发人员,你有没有碰到过这种前端开发人员,今天让你加一个字段,好,加了,然后打包发布。明天又让你加一个字段。后天突然又说,前两天加的字段,不需要,你会不会有种想喊“操”的冲动?
    2、作为后端开发员员,你有没有碰到过这种前端开发人员,今天跟你说接口不够用,要加个 GetUserByName 的方法,明天又说,还得加个 GetUserByEmail 的方法?然后,过了一段时间,你发现接口越来越多,维护的模块越来越痈肿,并且这些接口,你只敢加,不敢删除。因为,你根本不知道这些,有哪个不用的,你 跑去问前端,他也回答不出来。所以一些接口哪怕是没用的,也只能永远系统里,直到它生命周期的结束。
    如果你也碰到类似于我这种烦恼,使用 OData 也许是一个不错的选择,把查询的权限都开发给前端的开发人员,他爱怎么查就怎么查,都由它去。
    四、关于后端使用MVC

    我们的系统,使用MVC都是用来处理从前端提交上来的数据的,使用它主要是开发人员都熟悉MVC,然后MVC再调用业务层代码,同时,还需要处理:
    1、对提交上来的数据进行验证
    2、处理系统的异常,包括对异常进行重新的包装,再传回到客户端,以便于客户端的处理。对异常的信息进行记录。
    五、数据访问层

    关于数据访问层,在我们的系统里实际是一个 ORM 的包装器(ORM Wrapper),你在对 ORM 裹上一层外衣。目的在于:
    1、对数据进行拦截。例如:有些数据,只对某个角色的开发。数据访问层需要对根据过滤条件,然后再结合查询条件,重新生成SQL。
    2、对数据假删除的处理。见过很多系统,都是把删除放到业务层来进行的,其实这是不适合的,从业务的角度来说,关心的是删除,在执行删除后,这条数 据从我眼前消失就可以了。至真删除还是假删除,这与我无关。数据访问层,要做的就是这工作,它可以数据在真删除与假删除之间进行切换,只要配置一下,就可 以把真删除变成假删除(其实就是把Delete操作变成Update操作),使得进行业务开发人员,不用再关心数据的真假删除。
    3、对数据进行跟踪、备份。你肯定碰到过这么一种需要,需要记下来,每一次的更新操作的时间,以及更新了些什么内容。对于删除的数据,能够把它还原 回来。数据访问层,通过对 ORM进行包装,完全可以记录下每一次更新、删除这些操作,然后记录下来即可。当然,这些需求利用数据提供的功能也是可以实现的,不在讨论的范围内。

    展开全文
  • 有用 ... python的前后端分离(一):django+原生js实现get请求 https://segmentfault.com/a/1190000016049962 django写后端api http://www.cnblogs.com/sixrain/p/91...
  • web开发之前后端分离开发模式

    千次阅读 2019-06-24 11:36:11
    这种开发模式中前端代码作为后端代码的一部分,首先两端代码基本不分离,在开发时通常页面由后端人员创建,前端人员在页面文件上搭建样式完善交互功能等,页面上的数据由后端人员在服务器上时就已经渲染上去,而不是...
  • 解决题主的问题,首先得先想明白什么是SEO,然后再说前后端分离情况下如何做SEO优化。 我们假设这个产品是一个新产品,他需要做SEO,那么到底什么是SEO呢?SEO的缩写是『Search Engine Optimization』,搜索引擎...
  • 一个前端后端分离的架构实例.pdf
  • 这几天接触到的项目是前端后端分离的,前端使用了angular,原来没有接触过这方面的项目,咋一上手懵逼了,在不修改ajax访问路径的情况下如何实现与后台的交互?前期查到的一些资料作用不大,直到看到了一篇博客 ...
  • 尚融宝是一个投资理财类系统,作为全栈项目涉及的知识涵盖:前端后端及项目的业务开发,整体内容分为四个篇章:一、项目介绍和前后端核心框架 二、项目基本功能的实现 三、SpringCloud基础设施 四、核心业务流程的...
  • 高仿小米商城用户端 分为商城前端和商城后端两部分,是Vue + SpringBoot的前后端分离项目,用户端包括首页门户、商品分类、首页轮播、商品展示、商品推荐、购物车、地址管理、下订单、扫码支付等功能模块。...
  • WEB前端后端简单区别,通俗理解

    千次阅读 2021-01-26 16:22:35
    前端开发和后台开发是有区别的,工作的内容和负责的东西是完全的不同的,以下以网站的...网站前端工程师的工作内容就是将美工设计的效果图的设计成浏览器可以运行的网页,并和后端开发工程师配合做网页的数据显示和...
  • ●官网地址 ●Github 备注:主要组件还是以React为主,截止2019年02月17日更新博客前对Vue的支持还不太 完善 3、了解前后分离的演变史 为什么需要前后分离 3.1、 后端为主的MVC时代 为了降低开发的复杂度,以后端为...
  • 在现行的软件架构中,前端后端分离的,即前端只专注于页面渲染,而后台专注于业务逻辑,前端后端是两个不同的工种,而前后端交互最常见的方式就是通过接口。 前后端分离架构 在正式说明前后台架构分离之前,...
  • 某个下载的功能,要求后端返回一个路由给前端前端再把host和这个路由合并。现在遇到的问题是:1。前端的小伙伴,要求一定要以/分隔符开头返回,否则host合并的时候会少一个/分割符。2。后端的小伙伴认为,应该前端...
  • 轻松理解前后端分离(通俗易懂)

    万次阅读 多人点赞 2021-03-23 14:49:20
    文章目录一、前言二、前后端分离本质三、1.前后端分离2.不使用前后端分离会有什么问题 一、前言 该技术博客是关于楠哥教你学Java的前后端分离课程笔记总结,希望可以为大家带来帮助! 二、前后端分离本质 大家往往会...
  • 超级跑腿小程序(前端后端
  • 主要介绍了Django后端分离 使用element-ui文件上传方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 前后端未分离时代,页面逻辑处理以及页面渲染全部由后端完成。如最具代表性的 MVC 三层框架。用户发起请求至服务端控制层(Controller),控制层通过调用模型处理器(Model)以及渲染视图(View)并最终将页面返回给...
  • 前端软件:Microsoft VS Code 后端软件:IntelliJ IDEA 数据库:Navicat Premium 前端git地址:https://github.com/zouwanghua/ZWH_prodect_01.git 后端git地址:...
  • 前后端分离项目,如何解决跨域问题?

    千次阅读 多人点赞 2022-02-24 09:04:21
    跨域问题是前后端分离项目中非常常见的一个问题,举例来说,编程猫(codingmore)学习网站的前端服务跑在 8080 端口下,后端服务跑在 9002 端口下,那么前端在请求后端接口的时候就会出现跨域问题。 403 Forbidden ...
  • 配置: 去application配置下方配置,后面从D:开始的配自己的静态文件夹的绝对路径 spring.resources.static-locations= file:D://study/after end/shop/src/main/resources/static 相对路径配置方法: 前端访问静态...
  • 理解:什么是前后端分离开发

    千次阅读 2022-03-02 20:59:11
    前端或者后端的学习过程中,我们一定或多或少听说过前后端分离开发,但是相信不少人对于前后端分离这个概念仍然不是很清楚,因此本文就对什么是前后端分离开发做一个介绍。 一、什么是前端后端 在理解前后端...
  • 前端后端分离开发思路

    千次阅读 2016-08-09 18:02:07
    开发一个Web应用的时候我们一般都会简单地分为前端工程师和后端工程师(注:在一些比较复杂的系统中,前端可以细分为外观和逻辑,后端可以分为CGI和Server)。前端工程师负责浏览器端用户交互界面和逻辑等,后端负责...
  • java前端后端的区别

    千次阅读 2021-01-19 16:20:13
    java后端开发者使用这些工具编写干净、可移植、具有良好文档支持的代码来创建或更新 Web 应用。但在写代码之前,他们需要与客户沟通,了解其实际需求并转化为技术目标,制定最有效且精简的方案来进行实现。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,859
精华内容 34,343
关键字:

前端后端分离