[关闭]
@llplmlyd 2019-04-17T10:48:12.000000Z 字数 3280 阅读 841

Django入门基础

Python


web框架
大多数基于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:

  1. pip install django==1.10 #安装指定版本用该命令
  2. pip install django #默认安装最新版本

4. 验证安装

  1. python
  2. import django
  3. print(djano.get_version())

  1. python -m django --version

Django 使用

Project 与 APP 的区别:
一个app实现某个功能,比如博客、公共档案数据库或者简单的投票系统;
一个project是配置文件和多个app的集合,这些app组合成整个站点;
一个project可以包含多个app;
一个app可以属于多个project!

app的存放位置可以是任何地点,但是通常都将它们放在与manage.py脚本同级的目录下,这样方便导入文件。

创建APP

如在manage的目录下运行下面的命令,生成polls的app

  1. python manage.py startapp polls

编写简易视图

接收HTTP请求

在app目录下找到view文件

  1. from django.http import HttpResponse
  2. def index(request):
  3. return HttpResponse("Hello, world. You're at the polls index.")

当一级路由匹配url输入到app中的二级路由再次进行匹配,匹配完成后,调用view中相关定义的函数运行,最后通过返回结果。

视图View

一个视图就是一个页面,通常提供特定的功能,使用特定的模板。
Django中,网页和其它的一些内容都是通过视图来处理的。视图其实就是一个简单的Python函数(在基于类的视图中称为方法)。Django通过对比请求的URL地址来选择对应的视图。

编写路由与二级路由

为了能够调用该app中的视图view,需要编写url路由文件配置,在该app的目录下新建urls.py

  1. import django.conf.urls import url # 导入路由配置函数库
  2. from . import views #导出Awsl目录下的视图view
  3. #正则匹配网页上的url输入,并执行指定的函数,及对返回页面命名
  4. urlpattern = [ url(r'^$', views.index, name = 'index'),] #列表最后加个逗号

然后进行主路由的urls文件编辑,让主路由urls指向我们刚才建立的个app独有的urls文件

  1. from django.conf.urls import include, url # 导入include模块
  2. from django.contrib import admin
  3. urlpatterns = [
  4. url(r'^polls/', include('polls.urls')), # 添加该行
  5. path('admin/', admin.site.urls),
  6. ]
  7. # include语法相当于多级路由,它把接收到的url地址去除前面的正则表达式,将剩下的字符串传递给下一级路由进行判断,实现了应用解耦。

自动将封装的HttpRequest对象作为第一个参数

url方法 :regex和view

regex不会去匹配GET或POST参数或域名
从头开始进行逐一对比,一旦遇到匹配项,立即执行该条目映射的视图函数或下级路由,其后的条目将不再继续匹配。 顺序很重要

view

当二级url路由中正则表达式匹配到某个条目时,自动将封装的HttpRequest对象作为第一个参数,而正则表达式“捕获”到的值作为第二个参数,传递给该条目指定的视图view,找到对应的函数,正则匹配的第一个参数作为第二个参数的传入。
如果是简单捕获,那么捕获值将作为一个位置参数进行传递,如果是命名捕获,那么将作为关键字参数进行传递。
html使用 {{ }} 来获取数据

name

对你的URL进行命名,让你能够在Django的任意处,尤其是模板内显式地引用它。这是一个非常强大的功能,相当于给URL取了个全局变量名,不会将url匹配地址写死。

Database连接

在setting中设置启用的数据库类型 是整个Django项目的设置中心。Django默认启用sqlite,如使用其他类型的数据库,需要先自行安装数据库操作模块,并在setting中进行设置:

  1. # Database
  2. import pymysql # 一定要添加这两行!通过pip install pymysql!
  3. pymysql.install_as_MySQLdb()
  4. DATABASES = {
  5. 'default': {
  6. 'ENGINE': 'django.db.backends.mysql',
  7. 'NAME': 'database_name', #需要先自行创建数据库 CREATE DATABASE database_name
  8. 'HOST': '数据库host',
  9. 'USER': 'root',
  10. 'PASSWORD': 'pwd',
  11. 'PORT': '3306',
  12. }
  13. }

Database 建表

每个模型的物理存在方式就是一个Python的类Class,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。

在每个Field中使用一个可选的第一位置参数用于提供一个人类可读的字段名,让你的模型更友好,更易读,并且将被作为文档的一部分来增强代码的可读性。一些Field类必须提供某些特定的参数,会有可选参数。

修改完app的models.py:python manage.py makemigrations,创建迁移记录
python manage.py migrates 将操作同步到数据库

激活app

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控制的,正则匹配得到的后台管理界面。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注