当前位置:   article > 正文

python之web框架django_基于python构建的web程序django高性能框架+vue+mysql

基于python构建的web程序django高性能框架+vue+mysql

        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

  • Zend framework
  • CakePHP
  • Yii
  • ThinkPHP
  • symfony
  • kohanaphp
  • Seagull
  • Drupal
  • CodeIgniter

Python

  • django
  • pinax
  • Grok
  • Pylons
  • TurboGears
  • web2py
  • Zope
  • Quixote
  • snakelets
  • snakelets
  • PylonsHQ
  • Tornado

javascript

  • jQuery
  • MooTools
  • prototype
  • dojo
  • zk
  • Backbone.js
  • SproutCore
  • Sammy.js
  • Spine.js
  • Cappuccino
  • Knockout.js
  • Javascript MVC
  • GWT(Google Web Toolkit)
  • Google Closure
  • Ember.js
  • Angular.js
  • Batman.js
  • ExtJS

JAVA

  • Spring
  • Hibernate
  • Grails
  • Tapestry
  • ZK
  • SpringMVC
  • Struts2
  • Struts
  • Mybatis

Ruby

  • Ruby On Rails
  • Sinatra

.net

  • mvc
  • 三层
  • nhibernate

下面就python中常用的django框架进行阐述。


(1)初步了解Django

      Django是用python语言写的开源web开发框架,并遵循MVC设计,对比同源的Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。其具有以下特点,

  • 封装:大量的功能封装
  • 简化:把相对复杂的功能进行封装后做到简化
  • 优化:后台py代码优化提升效率
  • 漏洞:弥补了已知网站传输漏洞,如sql注入
  • 管理:框架以模块划分,分别负责不同的功能,清晰易于管理

     Django遵循的MVC设计与传统的MVC结构存在一定差异,故也常常被称为MTV结构

其整个流程如下,

利用django开始构建一个工程,具体操作如下,

具体的指令如下

 

  1. 创建项目:django-admin startproject mainproject
  2. 创建APP(进入项目目录):python manage.py startapp firstWEB
  3. 创建库表(进入项目目录):python manage.py makemigrations
  4. 执行库表建立(进入项目目录):python manage.py migrate
  5. 创建超级管理者(及设置admin登录账号和密码):python manage.py createsuperuser
  6. 启动django项目:python manage.py runserver
  7. 模板渲染嵌入语法:在html中可以嵌入后台语言 区分符号为 {%命令%} {{变量}}
  8. 需要注意的是,如果想嵌入for循环,需要在结束后添加{%endfor%},如
  9. {% for data in datas %}
  10. <tr>
  11. <td>{{ data.value_a }}</td>
  12. <td>{{ data.value_b }}</td>
  13. <td>{{ data.result }}</td>
  14. </tr>
  15. {% endfor %}

建好后,项目目录如下

其结构如下(大同小异),mainproject是一个项目,firstWEB是项目下的应用之一,可以使用创建命令创建更多的应用。

  • 其中mainproject项目文件夹和其下的mainproject文件夹: 执行django-admin startproject mainproject创建项目时自动创建
  • manage.py 同上也是执行django-admin startproject mainproject时自动创建,它是django的任务管理命令行工具。
  • firstWEB文件夹和migrations文件夹: 是执行python manage.py startapp firstWEB创建应用时自动创建。
  • db.sqlite3: 是创建应用,简单运行后自动添加的sqlite3数据库,在django中是默认使用这个(如需配置其配置路径为./my_site/settings.py)。
  • mainproject中的settings.py: 这个文件中包括了项目的初始化设置,可以针对整个项目进行有关参数配置,比如配置数据库、添加应用等。
  • mainproject中的urls.py: 这是一个总的URL配置表文件,主要是将URL映射到应用程序上。当用户请求某个URL时,django会根据这个文件夹中的映射关系指向某个目标对象,该对象可以是某个应用中的urls.py文件,也可以是某个具体的视图函数。在django中,这个文件也被称为URLconf,这是django非常强大的一个特性。
  • mainproject中的wsgi.py: WSGI是 Web Server Gateway Interface缩写,它是python所选择的服务器和应用标准,django也会使用。wsgi.py定义了我们所创建的项目都是WSGI应用。
  • 如果你还看到了__pycache__文件夹: 它是执行python manage.py runserver命令时自动创建,它是一个编译后的文件夹,里面放的是一些pyc结尾的文件。
  • firstWEB中的admin.py 这个文件中可以自定义django管理工具,比如设置在管理界面能够管理的项目,或者通过重新定义与系统管理有关的类对象,向管理功能增加新的内容。
  • firstWEB中的apps.py 这个文件时django1.10之后增加的,通常里面包含对应用的配置。
  • blog中的migration目录: 用于存储应用的数据表结构的指令,通过这些指令可以修改和创建数据库,从而在models.py模型类和数据库表之间迁移。
  • firstWEB中的modles.py 这是应用的数据类型,每个django应用都应当有一个 modles.py文件,虽然该文件可以为空,但不宜删除,这里就是编写模型类的地方。
  • firstWEB中的tests.py 在这个文件中可以编写测试文档来测试所建立的应用。
  • firstWEB中的views.py 这是一个重要的文件,用户保存响应各种请求的函数或者类。如果编写的是函数,则称为基于函数的视图;如果编写的是类,则称之为基于类的视图。views.py就是保存函数或者类的视图文件。当然也可以用其他的文件名称,只不过在引入响应函数或者类时,要注意名称的正确性,views.py是我们习惯使用的文件名称。
  • 配置模板的路径,即template文件夹这一般为自己手动建立,可放在应用文件夹下也可以放在外面,主要用来存放前端的html文件。使用时需要在项目的setting.py文件中进行配置。
  • 配置静态目录,即static文件夹,同样需要手动创建,主要存放css和js这些静态文件,在setting.py中进行设置。

(2)实例

     此次实例是以b站up主的教程为例,主要完成以下功能:

  • 新建一个django工程
  • 创建一个app,即生成一个网站
  • 创建model,创建数据表(库,有几个简单的字段)
  • 创建一个渲染模板页面并需要完成一个运算功能(加法)
  • 每次运算结果保存起来
  • 通过model读取全部的运算结果
  • 前端页面呈现数据库里的结果
  • 前端加一个清库功能,一键删除数据库内容

》首先前期的环境准备在这里就不赘述了,通过anaconda安装虚拟环境和django库,这里我使用的是win10下python3.7,django2.2, pycharm进行开发配置的 ,接着按照上面新建项目和app的方法,对此进行一一构建,同时添加一个template文件夹,用于存放前端html文件,最后效果如下,

接下来我们需要做的是在setting.py文件中做如下修改

如果同时想要修改语言与时区,可同时在setting.py中进行如下修改

  1. LANGUAGE_CODE = 'zh-Hans' ###en-us 修改为中文
  2. TIME_ZONE = 'Asia/Shanghai' ##UTC修改为中国时间

这个时候如果无误的话,启动项目,在浏览器中输入http://127.0.0.1:8000/会出现以下页面,即表示初步建立成功。

》接下来,需要做的就是添加页面与逻辑功能,同时关联其前后端操作

首先在firstWEB文件夹下的views.py文件中,添加逻辑函数

  1. from django.shortcuts import render
  2. from firstWEB.models import *
  3. from django.http import HttpResponse
  4. # Create your views here.
  5. def index(request):
  6. return render(request,'index.html')

这句话就是告诉渲染index.html文件,接着在新建的template文件夹下添加一个index.html文件,里面内容如下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>my first web from django</title>
  6. </head>
  7. <body>
  8. <h1 style="color:red">my first django website</h1>
  9. </body>
  10. </html>

最后需要做的就是告诉router路由进行映射,在项目文件下的urls.py文件中添加如下内容

  1. from django.contrib import admin
  2. from django.urls import path ##django 1.x版本用的是url来正则匹配,后面版本直接用path来实现
  3. from firstWEB import views
  4. urlpatterns = [
  5. path('admin/', admin.site.urls),
  6. path('abc/',views.index) ###在这里用abc还是index都行,只是用来做映射,在网页端输入对应即可
  7. ]

这时候在去浏览器中输入http://127.0.0.1:8000/abc/,即可出现以下界面

接下来的操作同上,在views.py中分别添加计算页与返回结果页

  1. def CalPage(request):
  2. return render(request,'cal.html')
  3. def Cal(request): ###返回结果
  4. if request.POST:
  5. value_a,value_b=request.POST["valueA"],request.POST["valueB"]
  6. result=int(value_a)+int(value_b)
  7. # print(value_a,value_b)
  8. return render(request,'result.html',context={"data":result})
  9. else:
  10. return HttpResponse("please visit us with POST")

同时在template下添加cal.html文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>计算页面</title>
  6. </head>
  7. <body>
  8. <form method="POST" action="/cal">
  9. {% csrf_token %}
  10. 第一个数字:<input type="number" name="valueA">
  11. +
  12. 第二个数字:<input type="number" name="valueB">
  13. <input type="submit" value="提交计算">
  14. </form>
  15. </body>
  16. </html>

以及result.html文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>结果页面</title>
  6. </head>
  7. <body>
  8. <h1>计算结果是:</h1><h2>{{data}}</h2>
  9. </body>
  10. </html>

然后再在urls.py文件中添加对应映射即可,最后在浏览器中检验结果。

》关联数据库

    最后假如我们想将结果写入到数据库中,这时候我们需要在应用项目文件夹下的models.py文件进行修改

  1. from __future__ import unicode_literals
  2. from django.db import models
  3. # Create your models here.
  4. ###类似于对表的描述
  5. class cal(models.Model):
  6. value_a=models.CharField(max_length=10)
  7. value_b=models.FloatField(max_length=10)
  8. result=models.CharField(max_length=30)

然后利用以下命令来生成数据库

  1. python manage.py makemigration
  2. python manage.py migrate

这个时候打开数据库就可以看到建好的数据库了,然后在views.py中,我们需要将前端操作的结果写入到数据库中

  • 在Cal函数中添加
  1. ###开始写入sql-lite数据库
  2. cal.objects.create(value_a=value_a,value_b=value_b,result=result)
  • 添加读取操作和删除操作
  1. def CalList(request):
  2. datas=cal.objects.all()
  3. # for data in datas:
  4. # print(data.value_a,data.value_b,data.result)
  5. return render(request,'list.html',context={"datas":datas})
  6. def DelData(request):
  7. cal.objects.all().delete()
  8. return HttpResponse('data deleted')

对应的在templates下添加list.html文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Cal list</title>
  6. </head>
  7. <body>
  8. <table border="1">
  9. <thead>
  10. <tr>
  11. <th>valueA</th>
  12. <th>valueB</th>
  13. <th>result</th>
  14. </tr>
  15. </thead>
  16. {% for data in datas %}
  17. <tr>
  18. <td>{{ data.value_a }}</td>
  19. <td>{{ data.value_b }}</td>
  20. <td>{{ data.result }}</td>
  21. </tr>
  22. {% endfor %}
  23. </table>
  24. <form action="del" method="POST">
  25. {% csrf_token %}
  26. <input type="submit" value="清库"></input>
  27. </form>
  28. </body>
  29. </html>

然后再在urls.py中添加映射即可。最后显示的界面结果如下

点击清库后,数据库清空,页面显示data deleted。


(3)补充点

》ORM(object relationship mapping)

表示对象-关系映射的缩写,实际上就是一种把数据库映射成对象的想法

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute)

比如说查询语句 SELECT id, first_name, last_name, phone, birth_date, sex FROM persons WHERE id = 10

对应到代码就是

  1. res = db.执行数据库(sql);
  2. name = res[0]["FIRST_NAME"];

那么ORM的写法就是

  1. p = Person.get(10);
  2. 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 基础教程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/894329
推荐阅读
相关标签
  

闽ICP备14008679号