Web服务器和应用服务器以及web应用框架:
web服务器:负责处理http请求,响应静态文件,常见的有 Apache, Nginx 以及微软的 IIS 等.
应用服务器:负责处理逻辑的服务器。比如Java、php 、Python 的代码,是不能直接通过 Nginx 这种web服务器来处理的,只能通过应用服务器来处理,常见的应用服务器有 uwsgi 、 tomcat 等。
web应用框架:一般使用某种语言,封装了常用的 web 功能的框架就是web应用框架, flask 、 Django 以及Java中的 SSM(Spring+SpringMVC+MyBatis) 等框架都是web应用框架。
一般开发一个web项目,首先考虑的就是web服务器架构选择(LAMP或者LNMP等),接下来才是针对模块进行开发。
Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架,前者的代表有Struts和Spring MVC等,后者的成员则有JSF、Tapestry等等,常见的架构有MVC和CMS两种。Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。常用的web开发框架根据不同语言罗列如下:
PHP |
|
Python |
|
javascript |
|
JAVA |
|
Ruby |
|
.net |
|
下面就python中常用的django框架进行阐述。
(1)初步了解Django
Django是用python语言写的开源web开发框架,并遵循MVC设计,对比同源的Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。其具有以下特点,
Django遵循的MVC设计与传统的MVC结构存在一定差异,故也常常被称为MTV结构
其整个流程如下,
利用django开始构建一个工程,具体操作如下,
具体的指令如下
创建项目:django-admin startproject mainproject
创建APP(进入项目目录):python manage.py startapp firstWEB
创建库表(进入项目目录):python manage.py makemigrations
执行库表建立(进入项目目录):python manage.py migrate
创建超级管理者(及设置admin登录账号和密码):python manage.py createsuperuser
启动django项目:python manage.py runserver
模板渲染嵌入语法:在html中可以嵌入后台语言 区分符号为 {%命令%} {{变量}}
需要注意的是,如果想嵌入for循环,需要在结束后添加{%endfor%},如
{% for data in datas %}
{{ data.value_a }}
{{ data.value_b }}
{{ data.result }}
{% endfor %}
建好后,项目目录如下
其结构如下(大同小异),mainproject是一个项目,firstWEB是项目下的应用之一,可以使用创建命令创建更多的应用。
django-admin startproject mainproject
创建项目时自动创建python manage.py startapp firstWEB
创建应用时自动创建。python manage.py runserver
命令时自动创建,它是一个编译后的文件夹,里面放的是一些pyc结尾的文件。(2)实例
此次实例是以b站up主的教程为例,主要完成以下功能:
》首先前期的环境准备在这里就不赘述了,通过anaconda安装虚拟环境和django库,这里我使用的是win10下python3.7,django2.2, pycharm进行开发配置的 ,接着按照上面新建项目和app的方法,对此进行一一构建,同时添加一个template文件夹,用于存放前端html文件,最后效果如下,
接下来我们需要做的是在setting.py文件中做如下修改
如果同时想要修改语言与时区,可同时在setting.py中进行如下修改
LANGUAGE_CODE = 'zh-Hans' ###en-us 修改为中文
TIME_ZONE = 'Asia/Shanghai' ##UTC修改为中国时间
这个时候如果无误的话,启动项目,在浏览器中输入http://127.0.0.1:8000/会出现以下页面,即表示初步建立成功。
》接下来,需要做的就是添加页面与逻辑功能,同时关联其前后端操作
首先在firstWEB文件夹下的views.py文件中,添加逻辑函数
from django.shortcuts import render
from firstWEB.models import *
from django.http import HttpResponse
# Create your views here.
def index(request):
return render(request,'index.html')
这句话就是告诉渲染index.html文件,接着在新建的template文件夹下添加一个index.html文件,里面内容如下
my first web from django
my first django website
最后需要做的就是告诉router路由进行映射,在项目文件下的urls.py文件中添加如下内容
from django.contrib import admin
from django.urls import path ##django 1.x版本用的是url来正则匹配,后面版本直接用path来实现
from firstWEB import views
urlpatterns = [
path('admin/', admin.site.urls),
path('abc/',views.index) ###在这里用abc还是index都行,只是用来做映射,在网页端输入对应即可
]
这时候在去浏览器中输入http://127.0.0.1:8000/abc/,即可出现以下界面
接下来的操作同上,在views.py中分别添加计算页与返回结果页
def CalPage(request):
return render(request,'cal.html')
def Cal(request): ###返回结果
if request.POST:
value_a,value_b=request.POST["valueA"],request.POST["valueB"]
result=int(value_a)+int(value_b)
# print(value_a,value_b)
return render(request,'result.html',context={"data":result})
else:
return HttpResponse("please visit us with POST")
同时在template下添加cal.html文件
计算页面
以及result.html文件
结果页面
计算结果是:
{{data}}
然后再在urls.py文件中添加对应映射即可,最后在浏览器中检验结果。
》关联数据库
最后假如我们想将结果写入到数据库中,这时候我们需要在应用项目文件夹下的models.py文件进行修改
from __future__ import unicode_literals
from django.db import models
# Create your models here.
###类似于对表的描述
class cal(models.Model):
value_a=models.CharField(max_length=10)
value_b=models.FloatField(max_length=10)
result=models.CharField(max_length=30)
然后利用以下命令来生成数据库
python manage.py makemigration
python manage.py migrate
这个时候打开数据库就可以看到建好的数据库了,然后在views.py中,我们需要将前端操作的结果写入到数据库中
###开始写入sql-lite数据库
cal.objects.create(value_a=value_a,value_b=value_b,result=result)
def CalList(request):
datas=cal.objects.all()
# for data in datas:
# print(data.value_a,data.value_b,data.result)
return render(request,'list.html',context={"datas":datas})
def DelData(request):
cal.objects.all().delete()
return HttpResponse('data deleted')
对应的在templates下添加list.html文件
Cal list
valueA
valueB
result
{% for data in datas %}
{{ data.value_a }}
{{ data.value_b }}
{{ data.result }}
{% endfor %}
然后再在urls.py中添加映射即可。最后显示的界面结果如下
点击清库后,数据库清空,页面显示data deleted。
(3)补充点
》ORM(object relationship mapping)
表示对象-关系映射的缩写,实际上就是一种把数据库映射成对象的想法
比如说查询语句 SELECT id, first_name, last_name, phone, birth_date, sex FROM persons WHERE id = 10
对应到代码就是
res = db.执行数据库(sql);
name = res[0]["FIRST_NAME"];
那么ORM的写法就是
p = Person.get(10);
name = p.first_name;
这样的好处就是可以不需要了解数据库底层,因为它不需要接触SQL
语句
》django
Django1.x中的正则形式去匹配链接,但是怎么匹配,网页都是弹出page not found错误,显示找不到链接,不得已的情况下将path换为了url发现网页能够正常匹配显示。通过查阅相关文档发现,Django2.x中的path不支持正则匹配,但在同一目录下的re_path与Django1.x中的url功能大部分相同可以替代url。
参考链接:
https://blog.csdn.net/Best_fish/article/details/84307045(Django框架和Tornado框架的区别)
https://www.cnblogs.com/yangmeichong/p/11303746.html(python之Djiango框架简介)
https://code.ziqiangxuetang.com/django/django-views-urls.html(Django 2.2 基础教程)