当前位置: 首页 > news >正文

站长工具视频网站如何做视频的软件

站长工具视频,网站如何做视频的软件,南充北京网站建设,网站建设top图Django框架的基本使用#xff0c;若依框架Django框架的基本使用Django是一个功能强大的web框架框架模式1、MVC和MTV框架MVC#xff1a;Web服务器开发领域里著名的MVC模式#xff0c;所谓MVC就是把Web应用分为模型(M)#xff0c;控制器(C)和视图(V)三层#xff0c;结构说明…Django框架的基本使用若依框架Django框架的基本使用Django是一个功能强大的web框架框架模式1、MVC和MTV框架MVCWeb服务器开发领域里著名的MVC模式所谓MVC就是把Web应用分为模型(M)控制器(C)和视图(V)三层结构说明如下M: models 数据库相关操作V: views 视图也就是业务逻辑相关操作C: controller 控制器也就是通过路径找到对应视图函数MTVDjango的MTV模式本质上和MVC是一样的也是为了各组件间保持松耦合关系只是定义上有些许不同。M: models 数据库相关操作T: templates html文件相关操作(模板渲染等)V: views 视图也就是业务逻辑相关操作加上一个url控制器也就是通过路径找到对应视图函数2、WSGIWSGI(Web Server Gateway Interface)就是一种规范它定义了web应用程序与web服务器程序之间的接口格式实现web应用程序与web服务器程序间的解耦。开发的项目分为两个部分的程序1 服务器程序 socket相关功能的模块wsgiref、uwsgi等等负责接收网络请求并解析网络请求相关数据分装加工成一些可用的数据格式,格式大家都是统一的方便应用程序的开发2 应用程序 就是使用接收到的网络请求相关数据进行逻辑代码的开发比如数据库相关操作数据结构的调整、文件操作等等。。。一、Django的基本使用1、下载的三种方式直接在pycharm中的setting中进行下载在cmd中通过命令下载pip install django版本在pycharm的Terminal控制台中进行下载(下载时要注意路径问题)2、创建项目(1)通过cmd或pycharm控制台的命令创建项目​先切换到要创建项目的目录下然后执行创建项目命令django-admin startproject mysite # mysite是项目名称​创建项目后会生成如下的目录当前目录下会生成mysite的工程,里面有个主目录和我们创建的项目目录同名在项目目录下有个manage.py文件在主目录下有settings.py\urls.py\wsgi.py每个文件的功能介绍如下manage.py ----- Django项目里面的工具通过它可以调用django shell和数据库启动关闭项目与项目交互等不管你将框架分了几个文件必然有一个启动文件其实他们本身就是一个文件。settings.py ---- 包含了项目的默认设置包括数据库信息调试标志以及其他一些工作的变量。urls.py ----- 负责把URL模式映射到应用程序。wsgi.py ---- runserver命令就使用wsgiref模块做简单的web server后面会看到renserver命令所有与socket相关的内容都在这个文件里面了目前不需要关注它。​一个django项目中可以有多个应用每个应用完成项目的部分功能这些功能相对于其他功能来说是相对独立的但又同时存在于同一个项目中每个应用的逻辑数据库等也都是相对独立的每个应用都有属于自己的模块单位开发的时候都是通过应用来写逻辑(2)通过pycharm创建django项目点击File --》New Project 选择第二项 Django在Location中选择选项目创建的地址和项目名Project Interpreter:Project Interpreter中的Newenvironment using是创建项目执行的虚拟环境Project Interpreter中的Existing interpreter是使用本地的环境也可以使用已创建好的虚拟环境More SettingsTemplate language:模板引擎默认是Django的Template模板引擎如若下载jinja2模板引擎可进行切换或者其他模板引擎注django中的模板引擎未单独封装成模块jinja2是模仿的的django的TemplateTemplates folder存放html文件的文件夹名Application name是创建的应用的应用名create创建完成后执行即可通过控制台显示的链接即可访问3、运行项目启动项目命令python manage.py runserver 127.0.0.1:8080ip和port可以不用写不写时默认是 127.0.0.1:8000运行成功后会看到一个项目链接在浏览器中输入此链接即可访问到创建的项目4、创建应用Application(1)cmd或pycharm控制器Terminal中创建应用​要在项目目录下执行命令进行创建应用python manage.py startapp 应用名经常用到的三个文件models.py 数据库相关内容views.py 视图业务逻辑代码相关内容tests.py 用来写一些测试代码用来测试我们自己写的视图的目前用不到(2)pycharm中手动创建应用创建应用文件夹(鼠标右键使用python package创建)在settings.py中找到INSTALLED_APPS在其下面添加应用的配置信息应用名.apps.应用名Config(后面的应用名的首字母大写)5、django项目的导入请看博客https://www.cnblogs.com/wylshkjj/p/11983596.html6、windows中安装不同版本的python解释器在python3.7及以上版本中使用django框架的时候django的版本要在2.0或以上否则会出现问题python3.6使用django的1.0版本。当想即使用python3.7和python3.6针对django的不同版本进行创建项目时python解释器的安装要注意解释器安装请参考博客https://www.cnblogs.com/wylshkjj/p/13122349.html二、url路由系统在django中url中的路径写法是正则正则里面有无名分组正则有有名分组正则那么对应django中的功能我们称之为无名分组路由和有名分组路由在django的1.0版本中路由配置文件urls.py中使用的是url()里面可以直接使用正则匹配路径的方式而在django的2.0版本中路由配置文件urls.py中使用的是path()里面不能直接使用正则匹配路径如需使用正则路径进行匹配就要使用re_path()使用前要先导入1、无命名分组路由看写法,urls.py文件中内容如下urlpatterns [...url(r^books/(\d)/(\d)/, views.book),#正则里面()分组正则会将分组中的正则匹配到的内容作为返回值返回]简单分析伪代码当用户请求的路径是它 /books/2019/8/url(r^books/(\d)/(\d)/, views.book), 里面做的事情如下re.match(^books/(\d)/,/books/2019/)2019 和 8 作为位置参数交给了要执行的book视图函数视图函数book的写法def book(request,xx,oo):xx 2019oo 8pass视图views.py文件中函数的写法#位置传参url中正则^books/(\d)/(\d)/那么第一个()分组匹配到的数据作为book函数的第二个参数第二个()分组匹配到的数据作为book的第三个参数def book(request, year, month):print(year, year, month, month) #year 2020# return HttpResponse(%s所有书籍 % year)return HttpResponse(%s年%s月所有书籍 % (year, month))使用url路由系统时需要注意几个点1. urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式一旦匹配成功则不再继续。2. 若要从URL中捕获一个值只需要在它周围放置一对圆括号(正则分组匹配)。3. 不需要添加一个前导的反斜杠(也就是写在正则最前面的那个/)因为每个URL 都有。例如应该是^articles 而不是 ^/articles。4. 每个正则表达式前面的r 是可选的但是建议加上。5. ^articles$ 以什么结尾以什么开头严格限制路径2、有名分组路由其实就玩得正则的有名分组看示例Urls.py文件中的写法urlpatterns [url(r^admin/, admin.site.urls),# /books/2020/6/url(r^books/(?P\d)/(?P\d)/, views.book),# {year:2020,month:6},url类将有名分组正则匹配出来的数据交给了book视图函数作为关键字参数来使用]View.py文件中函数的写法如下# ^books/(?P\d)/(?P\d)/#获取到url中的有名分组正则匹配到的数据那么函数形参名称必须和有名分组正则的那个名称相同才可以也就是按照上面的url来看的话函数的形参必须是year和month这两个名称,并且关键字传参不需要考虑函数形参的位置def book(request, month, year):# print(year, year, month, month) #year 2020print(request.path) #/books/2020/6/# return HttpResponse(%s所有书籍 % year)return HttpResponse(%s年%s月所有书籍 % (year, month))3、路径中的尾部斜杠问题当用户通过浏览器访问django框架完整的项目中的某个路径时如果用户在输入网址路径的最后没有加上/斜杠比如http://127.0.0.1:8000/test那么django会发将用户输入的网址路径加上一个后置的/,也就会将路径变成这样http://127.0.0.1:8000/test/然后给浏览器发送一个重定向的响应操作状态码为301那么浏览器拿到这个重定向操作之后就会自动发起一个这样的路径请求http://127.0.0.1:8000/test/所以当我们打开浏览器控制台的network功能查看请求过程时会看到两个请求一个没有后置的斜杠的一个是有后置斜杠的。第二个请求才会走到我们的urs.py文件中的路径配合和分发对应视图的地方。我们可以通过一个配置项告诉django不要自动加路径后面的斜杠了但是需要注意的就是你自己写的url中的正则也别加后面的斜杠不然正则匹配不到。配置项直接写在settings配置文件中任意位置APPEND_SLASH False #False表示告诉Django不加路径后面的斜杠默认值是True5、视图函数中指定默认值views.py文件# 在路由没有匹配任何参数的时候num使用自己的默认值# 当路由中有分组匹配数据的动作比如url(r^test/(\d)/, views.test),用户输入网址http://127.0.0.1:8000/test/22/那么22就被匹配到了会作为参数传给我们的test函数那么num的值就变成了22def test(request, num10):print(number,num)return HttpResponse(test)urls.py文件# url(r^test/, views.test),url(r^test/(\d)/, views.test),三、Django的视图1、request的对象常用的属性和方法print(request) # wsgirequest对象print(request.path) # 请求路径 #/index/print(request.method) # 请求方法print(request.POST) # post请求提交的数据 print(request.GET) # 获取url中的查询参数 #不是针对get请求的print(request.body) #获取http请求消息格式的请求数据部分的内容 bprint(request.META) #请求头信息print(request.get_full_path()) # 获取完整路径(包含查询参数的) /index/?a1b3print(request.FILES) # 上传的文件对象数据print(request.FILES.get(file)) # 上传的文件名#print(request.POST.get(username)) # 前端中传输的username的值print(request.POST.get(sex)) # 前端中单选传输的sex值# 多选提交来的数据通过getlist来获取print(request.POST.getlist(hobby)) # [2, 3]2、response的响应(1)常用方法from django.shortcuts import render, HttpResponse, redirectreturn HttpResponse(你好) #回复字符串return render(request,home.html) #回复html页面#重定向方法参数是个路径return redirect(/home/) #封装了302状态码以及浏览器要重定向的路径(2)添加响应头键值对ret render(request,home.html)ret[a] b #添加响应头键值对return ret(3)添加响应状态码ret render(request,home.html, status202) #render修改状态码还可以这样改#ret[a] b #添加响应头键值对ret.status_code 201 #添加响应状态码return ret #回复html页面3、CBV和FBV两种视图逻辑的写法方法FBV全称function based view就是基于函数来写视图逻辑CBV全称class based view就是基于类来写视图基于类的视图CBV写法如下views.py文件from django.views import View#登录需求class LoginView(View):# get请求 获取login页面def get(self,request):return render(request,login.html)# post请求获取post请求提交的数据并校验等等def post(self,request):print(request.POST)#return render(request,login.html)url路径的写法urls.py文件urlpatterns [url(r^admin/, admin.site.urls),url(r^index/, views.index),url(r^home/, views.home),# 类视图的url写法url(r^login/, views.LoginView.as_view()),]4、cbv源码重点(反射)from django.views import ViewView里面的dispatch方法中的反射逻辑实现了不同的请求方法找到我们视图类中的对应方法执行5、FBV和CBV加装饰器FBV和普通函数加装饰器方式一样示例#装饰器函数def outer(f):def inner(request, *args ,**kwargs):print(前面)ret f(request, *args ,**kwargs)print(后面)return retreturn inner#使用装饰器outerdef books(request):print(FBV执行了)return HttpResponse(book.html--ok)CBV加装饰器#装饰器函数def outer(f):def inner(request, *args ,**kwargs):print(前面)ret f(request, *args ,**kwargs)print(后面)return retreturn inner#使用装饰器#1 引入django提供的装饰器方法method_decorator来配合装饰器函数的使用from django.utils.decorators import method_decoratormethod_decorator(outer,nameget) #CBV加装饰器方式3class BookView(View):#给类方法统一加装饰器借助dispatch方法(父类的dispatch方法就是通过反射来完成不同的请求方法找到并执行我们自己定义的视图类的对应方法)# 重写dispatch方法dispatch方法是在其他请求方法对应的类方法执行之前执行的# method_decorator(outer) #加装饰器方式2def dispatch(self, request, *args, **kwargs):# print(xxxxxx)ret super().dispatch(request, *args, **kwargs)# print(oooooo)return ret#CBV加装饰器的方式1,给单独的方法加装饰器# method_decorator(outer)def get(self, request, xx):print(CBV的get方法)return render(request, book.html)# method_decorator(outer)def post(self,request, xx):print(CBV的post方法)return HttpResponse(ok)四、Django的Template模板1、Template的基本使用(1)通过{{ 变量 }}获取单个变量值(2)通过{% 逻辑 %}获取逻辑渲染结果2、变量的使用Number数据类型容器数据类型和对象都可以直接进行渲染(1)返回前端页面的数据格式在return返回的时候可以直接写入参数区别在于html中渲染的时候直接通过元素直接获取(使用原参数没有作用)容器数据类型才有效number类型无效return render(request, index.html, info)在return返回的时候也可以使用字典的方式使用字典时就是直接通过字典的键来进行相应的操作return render(request, index.html, {info: info})(2)句点号的使用​在字典数据类型中需要使用句点号和索引搭配才能获取到相应的值​同理对象的方法和属性的调用也是通过句点号而且要注意调用方法不能加()# views.pyfrom django.shortcuts import renderimport datetime# Create your views here.class obj():passdef index(request):pdd 1234info {name: 旋风奥利奥,age: 18,hobby: girl,dict: {drink: 饮品, milk: 牛奶},list: [面包, 包子],object: obj(),size: 123456,time: datetime.datetime.now()}return render(request, index.html, info)# return render(request, index.html, {info: info})# htmlTitle{{ name }}{{ dict }}{{ list }}{{ pdd }}{% for foo in list %}{{ foo }}{% endfor %}{% for k,v in dict.items %}{{ k }} : {{ v }}{% endfor %}{{ object.obk }}# url.pyfrom app01 import viewsurlpatterns [url(r^admin/, admin.site.urls),url(r^index/, views.index)]3、Template过滤器通过过滤器对数据进行过滤处理显示使用方式{{ 变量|过滤器参数 }}过滤器支持链式操作通过多个管道符和过滤器相配合实现层级过滤过滤器可以接收参数注意事项管道符左右两遍不能留空格否则不能识别还有参数和间也不能留空格3.1、内置过滤器(1)default默认值​当变量获取的到值的时候显示获取的值获取不到值或者获取的是一个布尔类型的False时就使用默认的default值{{ value|default:没有值}}(2)length长度​返回的是字符串或列表的长度{{ value|length }}(3)filesizeformat文件大小的显示处理​将值格式化为一个 “人类可读的” 文件尺寸 (例如 13 KB, 4.1 MB, 102 bytes, 等等)。(4)slice切片{{ value|slice:2:-1 }}(5)date时间显示处理​对获取的时间进行过滤处理{{ value|date:Y-m-d H:i:s}}(6)safe声明此变量值(或代码段)不转义{a_tag:百度,}渲染{{ a_tag|safe }} #生成标签效果(7)truncatechars指定字符串长度超出部分以 ... 显示{{ value|truncatechars:9}}指定九个字符长度也包括 ... 这三个字符(8)truncatewords以单词的形式指定字符串长度超出部分以 ... 显示​{{ value|truncatewords:3}}指三个单词长度不包括 ... 部分(9)cut过滤字符串​{{ value|cut: }}过滤掉value变量中和参数中的空格相同的字符(10)join字符串拼接​{{ hobby|join: }}把列表数据通过加号拼接成一个字符串3.2、自定义过滤器在应用文件夹中创建一个名为templatetags的文件夹(文件夹的名字必须是templatetags)在templatetags文件夹中创建任意 .py 文件如mytag.py在mytag.py文件中写上如下内容from django import templateregister template.Library() # 制作注册器名字必须叫register#过滤最多两个参数register.filter # 注册过滤器,需要两个参数的def add(v1, v2): # v1表示管道符前面的v2表示冒号后面的参数print(v1,v2) # 100 50return v1 v2register.filter # 注册过滤器需要一个参数的def xxx(v1): # v1表示管道符前面的print(v1)return xxx在html文件中导入{% load mytag %} Titlebase页面{{ num|add:50}} {{ num|xxx }}4、Template标签​使用方式{% 标签 %} {%end标签%}4.1、内置标签(1)for 循环标签​{% for xx in hobby %}{% endfor %}forloop的使用​注循环序号可以通过forloop显示必须在循环内部用forloop.counter 当前循环的索引值(从1开始)forloop是循环器通过点来使用功能forloop.counter0 当前循环的索引值(从0开始)forloop.revcounter 当前循环的倒序索引值(从1开始)forloop.revcounter0 当前循环的倒序索引值(从0开始)forloop.first 当前循环是不是第一次循环(布尔值)forloop.last 当前循环是不是最后一次循环(布尔值)forloop.parentloop 本层循环的外层循环的对象再通过上面的几个属性来显示外层循环的计数等for循环的反向循环​可以利用{% for obj in list reversed %}反向完成循环。Title{% for i in dict %}{{ i }}{% endfor %}{% for i in dict.values %}{{ i }}{% endfor %}{% for k,v in dict.items %}{{ k }} : {{ v }}{% endfor %}{% for foo in list %}{{ forloop }} : {{ foo }}{% endfor %}{% for foo in list %}{{ forloop.counter }} : {{ foo }}{% endfor %}{% for foo in list %}{{ forloop.counter0 }} : {{ foo }}{% endfor %}{% for foo in list %}{{ forloop.revcounter }} : {{ foo }}{% endfor %}{% for foo in list %}{{ forloop.revcounter0 }} : {{ foo }}{% endfor %}{% for foo in list %}{{ forloop.first }} : {{ foo }}{% endfor %}{% for foo in list %}{{ forloop.last }} : {{ foo }}{% endfor %}{% for foo in list %}{% for foo in list %}{{ forloop.parentloop.counter }} : {{ forloop.revcounter0 }} : {{ foo }}{% endfor %}{% endfor %}# 反向循环列表{% for foo in list reversed %}{{ foo }}{% endfor %}(2)if 判断标签​{% if 判断条件 %}{% endif %}if语句支持 and 、or、、、、in、not in、is、is not判断注意条件两边都有空格。但是不支持连续判断操作{% if a b c %}{% endif %}{% if %}会对一个变量求值如果它的值是“True”(存在、不为空、且不是boolean类型的false值)对应的内容块会输出。{% if num 100 or num 0 %}无效 {% elif num 80 and num 100 %}优秀{% else %} 凑活吧{% endif %}​(3)with 起别名标签​使用一个简单地名字缓存一个复杂的变量多用于给一个复杂的变量起别名当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的注意等号左右不要加空格。方式一{% with totalbusiness.employees.count %}{{ total }} {% endwith %}方式二{% with business.employees.count as total %}{{ total }}{% endwith %}(4)for empty联合使用的情况​当循环的hobby没有数据或为空的时候就显示empty下面的内容{% for xx in hobby %}{{ xx }}{% empty %}抱歉没有查询到相关数据{% endfor %}(5)Django的模板语言中属性的优先级大于方法​处理的字典数据中不要出现以方法名为键的键值对因为默认会获取该键值对数据而不是走方法去处理数据导致得不到想要的数据结果。def xx(request):d {a: 1, b: 2, c: 3, items: 100}return render(request, xx.html, {data: d})​如上我们在使用render方法渲染一个页面的时候传的字典d有一个key是items并且还有默认的 d.items() 方法此时在模板语言中{{ data.items }}​默认会取d的items key的值。4.2、自定义标签在应用文件夹中创建一个名为templatetags的文件夹(文件夹的名字必须是templatetags)在templatetags文件夹中创建任意 .py 文件如mytag.py在mytag.py文件中写上如下内容from django import templateregister template.Library() #制作注册器名字必须叫registerregister.simple_tagdef atag(v1,v2): #没有参数个数限制print(v1,v2)return v1 v2在html文件中导入{% load mytag %}Titlebase页面{% load mytag %}{% atag a b %} 5、Templete模板继承将一些页面公共的部分可以抽离出来单独做成一个html页面使用这些公用部分的其他html文件只需要继承一下它就可以了具体使用流程如下(1) 创建公用模板,比如内容如下Titlebody{padding: 0;margin: 0;}{% block css %}.nav{height: 60px;background-color: green;}{% endblock %}.nav a{color:white;text-decoration: none;}.left-menu{width: 30%;background-color: rgba(0,0,0,0.5);float:left;}.menu .menu-title{text-align: center;}.main{float: right;width: 65%;height: 300px;border: 1px solid red;}首页个人中心详情页菜单1局部按摩全身按摩足底按摩头部按摩菜单2盲人按摩推背刮痧精油、火罐{% block content %}公共页面{% endblock %}{% block js %}{% endblock %}(2)将来如果说继承公用模板的html文件中需要修改公用模板中的一些内容那么需要在公用模板中预留一些钩子钩子的写法如下{% block content %} #block 后面的块名称随便起公共页面{% endblock %}#也可以这样写 {% endblock content %} #endblock指定名称(3)继承公用模板需要在html文件中写如下内容{% extends xx.html %} {% block css %}.nav{height: 60px;background-color: pink;}{% endblock %}{% block content %}首页{% endblock %}(4) 在使用公用模板的其他html文件中如果需要更改公用模板里面的内容只需要在html文件中写上相同的钩子钩子里面写上自定义的内容写法如下{% block css %}.nav{height: 60px;background-color: pink;}{% endblock %}{% block content %}首页{% endblock %}(5)注意事项如果你在模版中使用 {% extends %} 标签它必须是模版中的第一个标签。其他的任何情况下模版继承都将无法工作模板渲染的时候django都不知道你在干啥。在base模版中设置越多的 {% block %} 标签越好。子模版不必定义全部父模版中的blocks所以可以在大多数blocks中填充合理的默认内容然后只定义你需要的那一个。多一点钩子总比少一点好。如果你发现你自己在大量的模版中复制内容那可能意味着你应该把内容移动到父模版中的一个 {% block %} 中。{{ block super }}的使用在子模板中也展示出父模板原来钩子中的内容{% block content %}首页{{ block.super }}{% endblock %}为了更好的可读性你也可以给你的 {% endblock %} 标签一个 名字 。例如{% block content %}...{% endblock content %}在大型模版中这个方法帮你清楚的看到哪一个  {% block %} 标签被关闭了。不能在一个模版中定义多个相同名字的 block 标签。#两个block都叫content这种写法是不对的{% block content %}首页{{ block.super }}{% endblock %}{% block content %}首页{{ block.super }}{% endblock %}6、要注意Template模板渲染实在浏览器解释之前执行的模板渲染后才轮到浏览器器来执行解释7、拓展XSS攻击(上面过滤|safe的拓展)xss攻击全称跨站脚本攻击​Django的模板中在进行模板渲染的时候会对HTML标签和JS等语法标签进行自动转义原因显而易见这样是为了安全django担心这是用户添加的数据比如如果有人给你评论的时候写了一段js代码这个评论一提交js代码就执行啦这样你是不是可以搞一些坏事儿了写个弹窗的死循环浏览器就不能用了浏览器会一直弹出弹窗这叫做xss攻击所以浏览器中进行了一些转义处理。但是有的时候我们需要这些HTML元素不被转义比如我们做一个内容管理系统后台添加的文章中是经过修饰的这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。http://www.dengb.com/Pythonjc/1413982.htmlwww.dengb.comtruehttp://www.dengb.com/Pythonjc/1413982.htmlTechArticleDjango框架的基本使用若依框架 Django框架的基本使用 Django是一个功能强大的web框架 框架模式 1、MVC和MTV框架 MVCWeb服务器开发领域里著名...
http://www.sadfv.cn/news/360124/

相关文章:

  • 一学一做腾讯视频网站西宁网站seo外包
  • asp影楼网站数据库用什么软件广州 海珠 建网站
  • 备案空壳网站通知用什么网站做pathway分析
  • 北京漫步云端网站建设企业网站建设的步骤
  • 科技制作网站深圳设计工作室有哪些
  • 网站建设网站需要什么软件网站备案流程阿里云
  • 邢台做网站推广找谁wordpress设置爬虫页面
  • 做公司网站的资料网站开发常用jquery插件总结(四)验证插件validation
  • 最成功设计 网站seo搜索引擎优化师
  • 泉州制作手机网站网站域名icp备案
  • 大淘客网站推广位怎么做响应式网站案列
  • 深圳网站平面设计公司想做网络推广贵不
  • 江苏企业建网站排名优化湖北智能网站建设推荐
  • 云南放心seo整站优化网站建设 商城
  • 怎么给网站添加关键字wordpress支付宝扫码支付
  • 住房和城乡建设部标准定额网站租用网络服务器的价格
  • 智联招聘网站建设做网站策划的工具
  • dw做汽车网站有名的wordpress主题商
  • 互联网站开发管理文档站长之家点击进入
  • 做网站版权所有怎么写搭建wordpress写不进去
  • 广东网站建设咨询电话最好看免费观看高清大全宫崎骏
  • 域名怎么做网站想在网上卖货需要怎么做
  • 广州网站建设推荐乐云seohtml5开发环境
  • 中国电力建设股份有限公司网站广州网站优化页面
  • 促销礼品网站建设商城版手机网站制作
  • 建设一个自己的网站需要多少钱多语言网站建设 技术
  • 个人网站特点新手建站广告联盟赚钱
  • 没有网站怎么做CPC做房产网站赚钱吗
  • 巴州住房和城乡建设局网站北京网站推广怎么做
  • 你们网站做301wordpress在线翻译