@llplmlyd
2019-04-17T10:48:12.000000Z
字数 3280
阅读 841
Python
大多数基于Python的web框架,如Django、tornado、flask、webpy都是在这个范围内进行增删裁剪的。例如Tornado用的是自己的异步非阻塞“WSGI”网关接口,Flask则只提供了最精简和基本的框架,Django则是直接使用了现成的WSGI,并实现了大部分功能,提供了大量的应用工具。
全栈框架,是指除了封装网络和线程操作,还提供HTTP、数据库读写管理、HTML模板引擎等一系列功能的Web框架,比如Django、Tornado和Flask。
模型(Model):用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是Web应用程序中用于处理应用程序的数据逻辑的部分,Model只提供功能性的接口,通过这些接口可以获取Model的所有功能。白话说,这个模块就是Web框架和数据库的交互层。
视图(View):负责数据的显示和呈现,是对用户的直接输出。
控制器(Controller):负责从用户端收集用户的输入,可以看成提供View的反向功能。
MVC 三个部分互相独立,但又相互联系,使得改进和升级界面及用户交互流程,在Web开发过程任务分配时,不需要重写业务逻辑及数据访问代码。
Django将MVC模式进行了改造:
1. 把视图又拆分成了 view 和 Template,将动态的逻辑处理与静态的页面展现分离开。
2. Model采用了ORM技术,将关系型数据库表抽象成面向对象的Python类,将表操作转换成类操作,避免了复杂的SQL语句编写。
Django安装
Django本质上是Python语言的一个类库
1. 安装Python编辑器
2. 安装Pycharm编辑器
3. 安装Django:
pip install django==1.10 #安装指定版本用该命令
pip install django #默认安装最新版本
4. 验证安装
python
import django
print(djano.get_version())
或
python -m django --version
Django 使用
Project 与 APP 的区别:
一个app实现某个功能,比如博客、公共档案数据库或者简单的投票系统;
一个project是配置文件和多个app的集合,这些app组合成整个站点;
一个project可以包含多个app;
一个app可以属于多个project!
app的存放位置可以是任何地点,但是通常都将它们放在与manage.py脚本同级的目录下,这样方便导入文件。
如在manage的目录下运行下面的命令,生成polls的app
python manage.py startapp polls
在app目录下找到view文件
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
当一级路由匹配url输入到app中的二级路由再次进行匹配,匹配完成后,调用view中相关定义的函数运行,最后通过返回结果。
一个视图就是一个页面,通常提供特定的功能,使用特定的模板。
Django中,网页和其它的一些内容都是通过视图来处理的。视图其实就是一个简单的Python函数(在基于类的视图中称为方法)。Django通过对比请求的URL地址来选择对应的视图。
为了能够调用该app中的视图view,需要编写url路由文件配置,在该app的目录下新建urls.py
import django.conf.urls import url # 导入路由配置函数库
from . import views #导出Awsl目录下的视图view
#正则匹配网页上的url输入,并执行指定的函数,及对返回页面命名
urlpattern = [ url(r'^$', views.index, name = 'index'),] #列表最后加个逗号
然后进行主路由的urls文件编辑,让主路由urls指向我们刚才建立的个app独有的urls文件
from django.conf.urls import include, url # 导入include模块
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')), # 添加该行
path('admin/', admin.site.urls),
]
# include语法相当于多级路由,它把接收到的url地址去除前面的正则表达式,将剩下的字符串传递给下一级路由进行判断,实现了应用解耦。
自动将封装的HttpRequest对象作为第一个参数
regex不会去匹配GET或POST参数或域名
从头开始进行逐一对比,一旦遇到匹配项,立即执行该条目映射的视图函数或下级路由,其后的条目将不再继续匹配。 顺序很重要
当二级url路由中正则表达式匹配到某个条目时,自动将封装的HttpRequest对象作为第一个参数,而正则表达式“捕获”到的值作为第二个参数,传递给该条目指定的视图view,找到对应的函数,正则匹配的第一个参数作为第二个参数的传入。
如果是简单捕获,那么捕获值将作为一个位置参数进行传递,如果是命名捕获,那么将作为关键字参数进行传递。
html使用 {{ }} 来获取数据
对你的URL进行命名,让你能够在Django的任意处,尤其是模板内显式地引用它。这是一个非常强大的功能,相当于给URL取了个全局变量名,不会将url匹配地址写死。
在setting中设置启用的数据库类型 是整个Django项目的设置中心。Django默认启用sqlite,如使用其他类型的数据库,需要先自行安装数据库操作模块,并在setting中进行设置:
# Database
import pymysql # 一定要添加这两行!通过pip install pymysql!
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name', #需要先自行创建数据库 CREATE DATABASE database_name
'HOST': '数据库host',
'USER': 'root',
'PASSWORD': 'pwd',
'PORT': '3306',
}
}
每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。
在每个Field中使用一个可选的第一位置参数用于提供一个人类可读的字段名,让你的模型更友好,更易读,并且将被作为文档的一部分来增强代码的可读性。一些Field类必须提供某些特定的参数,会有可选参数。
修改完app的models.py:python manage.py makemigrations,创建迁移记录
python manage.py migrates 将操作同步到数据库
django.contrib.admin:admin管理后台站点
django.contrib.auth:身份认证系统
django.contrib.contenttypes:内容类型框架
django.contrib.sessions:会话框架
django.contrib.messages:消息框架
django.contrib.staticfiles:静态文件管理框架
1 开启数据库
2 python manage.py createsupersuser
3 将APP在admin中进行注册
考虑站点安全性:修改管理后台的url,url访问是路由文件管理的,后台的url管理是根目录下的url控制的,正则匹配得到的后台管理界面。