前面介绍了了Python中一些高级知识,下面学习分享下基于Python的WEB架构-----Django。
首先介绍下什么是WEB框架,其实就是别人搭好的框框,自己根据项目需求,遵循框架的规则填写自己的东西,以达到实现项目功能,这就是框架本质的意义。
而对于一般的web框架,大概都是这样的:
而Django是怎样的模式呢?它采用的是MTV模式-M(model)模型、T(template)模板和V(view)业务
我仔细研究了下MTV和MVC区别,其实就是改了个说法而已,大家都知道MVC对应的是模型(model)-视图(view)-控制器(controller)的缩写,其实MTV和MVC的对应关系,很对人会问为什么视图中的view到了MTV中的view业务,其实这个和框架结构有关,view到了Django中就成了承载业务的模块了。
MTV的架构如下:
也就是当浏览器通过http请求服务端是首先消息会到达WSGI模块,然后到达路由,再通过路由分发到各自的业务view,而view一般会通过业务处理查询数据库等操作再结合模板返回给浏览器,就成了客户端的界面展示。其实在很多项目中,因为框架自身和客户端响应的原因,是没有模板这一块的,而模板这一块被单独出去了。
下面主要通过一个示例来展示Django框架是怎么用的:
1、首先安装django模块,并加入环境变量:
pip install django
在Python35/Scripts/目录中找到django-admin.exe文件并加入到环境变量中
2、创建django工程:
这里使用编辑工具Pycharm:点击file---->new project
输入项目名称django_test,点击创建,生成如下项目:
3、创建APP:
在每个django项目中可以包含多个APP,相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也有联系。所有的APP共享项目资源
在pycharm下方的terminal终端中输入命令:
python manage.py startapp cmdb
生成下面的APP:
4、需要在setting文件中进行一些配置:
a、注册APP:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb'
)
b、配置数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
5、对于项目需求,还是需要数据库的,下面就根据一个具体的实例来讲解django所有的组件(做一个简单的登陆系统)
一、首先,我们基于需求设计简单的数据库,
models.py的代码如下:
from django.db import models
# Create your models here.
class UserInfo(models.Model):
user = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)
然后运行下面这两个命令:
1、python manage.py makemigrations
这个文件就是后面生成数据库表的脚本,每修改一次models文件,再运行上述命令就会生成一个文件,这对于版本安装和升级都是很方便的
2、python manage.py migrate
这个命令就会去执行上述生成的脚本,进而生成数据库
二、数据库生成完成后,这里就需要进行view、template的编码和url的配置了:
1、首先这里写一个view的代码如下:
from django.shortcuts import render
from cmdb import models
import datetime
# Create your views here.
def index(request):
if request.method == "POST":
username = request.POST.get("username", None)
password = request.POST.get("password", None)
models.UserInfo.objects.create(user=username, pwd=password)
time_value = str(datetime.date.today())
user_list = models.UserInfo.objects.all()
if user_list:
return render(request, "index.html", {"data": user_list, "time": time_value})
return render(request, "index.html")
这里主要是一个插入数据库和展示数据库的代码
2、可以看到上述代码使用了html文件,下面生成html文件-index.html在template目录,内容为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="/static/css/basic.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1 class="qw">python</h1>
<form action="/index/" method="post">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value="提交"/>
</form>
<br>
<strong>{{time}}</strong>
<table>
<thead >
<th>user</th>
<th>password</th>
</thead>
<tbody>
{% for line in data %}
<tr>
<td>{{ line.user }}</td>
<td>{{ line.pwd }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<srcipt type="text/javascript" src="/static/js/jquery-3.2.1.min.js"></srcipt>
</body>
</html>
可以看到代码中包含css和js文件,那这些文件是配置在哪个目录下的,这里我们和template同级目录创建static目录,并写入css和js文件,并在setting配置文件中配置,配置如下:
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
三、最后编辑url,配置如下:
from django.conf.urls import include, url
from django.contrib import admin
from cmdb import views
urlpatterns = [
url(r'^index/', views.index),
]
四、整体工程编程完成,最后运行下:
python manage.py runserver 127.0.0.1:8000
效果展示:
输入url:http://localhost:8000/index/
界面:
然后输入如下,并点击提交:
admin/qwe
展示如下: