我来记笔记啦-Django开发流程与配置

Stick·连翼 2021-01-21 20:57:27
开发 django 笔记 流程 记笔记


环境Ubuntu20.04Django1.11.1

1.Django介绍

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。

1.1 重量级框架

对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。

  • 提供项目工程管理的自动化脚本工具
  • 数据库ORM支持(对象关系映射,英语:Object Relational Mapping)
  • 模板
  • 表单
  • Admin管理站点
  • 文件管理
  • 认证权限
  • session机制
  • 缓存

1.2 MVC模式说明

  • M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
  • V全拼为View,用于封装结果,生成页面展示的html内容。
  • C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

1.3 Django的MVT

  • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
  • V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
  • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。

1.4 Django配置顺序

bookmanager: 为工程目录;
book: 为应用目录;
bookmanager/settings.py -->> bookmanager/urls.py -->>
book/urls.py -->> book/views.py -->> templates/book/index.html
-->> book/models.py -->> 数据库

1. 创建Django项目

django-admin startproject bookmanager
执行后,会多出一个新目录名为bookmanager,此即为新创建的工程目录。
  • 与项目同名的目录,此处为bookmanager。
  • settings.py是项目的整体配置文件。
  • urls.py是项目的URL配置文件。
  • wsgi.py是项目与WSGI兼容的Web服务器入口。
  • manage.py是项目管理文件,通过它管理项目。

运行服务器命令如下:

# vim ./bookmanager/settings.py 中设置ALLOWED_HOSTS = ['*']
# 设置后可远程访问 ip 0.0.0.0:8000
python manage.py runserver ip:端口
或:
python manage.py runserver

2.创建Django子应用

在django中,创建子应用模块目录仍然可以通过命令来操作,即:

python manage.py startapp 子应用名称
例如:cd ~/book
python manage.py startapp book
执行后,可以看到工程目录中多出了一个名为book的子目录
  • admin.py文件跟网站的后台管理站点配置相关。
  • apps.py文件用于配置当前子应用的相关信息。
  • migrations目录用于存放数据库迁移历史文件。
  • models.py文件用户保存数据库模型类。
  • tests.py文件用于开发测试用例,编写单元测试。
  • views.py文件用于编写Web应用视图。

3. 注册安装子应用

在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下:

例如,将刚创建的book子应用添加到工程中,可在INSTALLED_APPS列表中添加'book.apps.BookConfig'

vim ./bookmanager/settings.py
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加自己的子应用
'book.apps.BookConfig',
]

4. 使用Django进行数据库开发

4.1. 定义模型类

子应用目录models.py中定义模型类,继承自models.Model

from django.db import models
# Create your models here.
# 准备书籍列表信息的模型类
class BookInfo(models.Model):
# 创建字段,字段类型...
name = models.CharField(max_length=10)
# 准备人物列表信息的模型类
class PeopleInfo(models.Model):
name = models.CharField(max_length=10)
gender = models.BooleanField()
# 外键约束:人物属于哪本书
book = models.ForeignKey(BookInfo)

4.2. 模型迁移 (建表)

  • 根据子应用目录models.py的内容生成创建表的语句和在数据库中创建表

  • 生成迁移文件:根据模型类生成创建表的语句

    python manage.py makemigrations
    子应用目录下makemigrations目录下会生成0001_initial.py
    
  • 执行迁移:根据第一步生成的语句在数据库中创建表

    python manage.py migrate
    
  • 提示:默认采用sqlite3数据库来存储数据

5.站点管理

5.1.管理界面本地化

Django工程目录下settings.py设置中文和时区:

# 设置中文
LANGUAGE_CODE = 'zh-Hans'
# 亚洲上海时区
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True

5.2 创建管理员

创建管理员的命令 :

 python manage.py createsuperuser
# 根据提示输入管理用户名和密码
  • 重置密码

  • python manager.py changepassword 用户名
    

启动服务: python manage.py runserver ip:端口

登陆站点 :http://127.0.0.1:8000/admin 管理数据库。

在子应用目录models.py中优化模型类展示:

# 准备书籍列表信息的模型类
class BookInfo(models.Model):
# 创建字段,字段类型...
name = models.CharField(max_length=10)
def __str__(self):
"""将模型类以字符串的方式输出"""
return self.name # 在网站管理列表中可以看到name属性

6.视图和URL

6.1. 定义视图函数

在子应用目录中的views.py里定义

  • 视图就是一个Python函数,被定义在应用views.py中.
  • 视图的第一个参数是HttpRequest类型的对象reqeust,包含了所有请求信息.
  • 视图必须返回HttpResponse对象,包含返回给请求者的响应信息.
  • 需要导入HttpResponse模块 :from django.http import HttpResponse
  • 定义视图函数 : 响应字符串OK!给客户端
# vim ./book/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse('OK!!!')

6.2. 配置URLconf

查找视图的过程 :

  • 1.请求者在浏览器地址栏中输入URL, 请求到网站.
  • 2.网站获取URL信息.
  • 3.然后与编写好的URLconf逐条匹配.
  • 4.如果匹配成功则调用对应的视图.
  • 5.如果所有的URLconf都没有匹配成功.则返回404错误.

在工程目录中settings.py 设置URLconf入口:

# vim ./bookmanager/settings.py
ROOT_URLCONF = 'bookmanager.urls'
  • 需要两步完成URLconf配置
    • 1.在项目中定义URLconf
    • 2.在应用中定义URLconf
  • 项目中定义URLconf
# vim ./bookmanager/urls.py
from django.conf.urls import url,include # 导入
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 正则匹配规则:只要不是admin/ 就算匹配成功
url(r'^', include('book.urls'))
]
  • 应用中定义URLconf
# 在子应用目录下新建urls.py
# vim ./book/urls.py
from django.conf.urls import url
from book.views import index
# urlpatterns为固定写法
urlpatterns = [
url(r'^$',index) # 路由引导视图函数
]

7.模板

7.1 模板使用步骤

  • 1.创建模板
  • 2.设置模板查找路径
  • 3.模板接收视图传入的数据
  • 4.模板处理数据

7.2创建模板

  • 应用同级目录下创建模板文件夹templates. 文件夹名称固定写法.
  • templates文件夹下, 创建应用同名文件夹. 例, Book
  • 应用同名文件夹下创建网页模板文件. 例 :index.html

7.3设置模板查找路径

在工程目录下, vim bookmanager/setings.py 设置DIRS

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

7.4.模板接收视图传入的数据

在子应用目录下编写:
vim book/views.py
# -*- coding:utf-8 -*-
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
context = {'title':'测试模板数据'}
return render(request, 'book/index.html', context)

7.5.模板处理数据

# 编写模板数据html、css、js等
vim templates/book/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试模板数据</title>
</head>
<body>
<h1>根路径下的数据</h1>
<di style="background: red; font-size: 30px"> {{title}} </di>
</body>
</html>

7.6. 查看模板处理数据成果

1.运行服务器: python manage.py runserver 0.0.0.0:8000

2.在服务器中输入: http://192.168.1.101:8000/ 访问

8.数据库数据在网页展示

实现步骤:

  • 1.创建视图
  • 2.创建模板
  • 3.配置URLconf

8.1创建视图

  • 查询数据库数据
  • 构造上下文
  • 传递上下文到模板
子应用目录下修改: vim book/views.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from book.models import BookInfo,PeopleInfo
# BookInfo,PeopleInfo 模型类,在4.1定义迁移过
def index(request):
context = {'title':'测试模板数据'}
return render(request, 'book/index.html', context)
# 定义视图:提供书籍列表信息
def bookList(request):
# 查询数据库书籍列表数据
books = BookInfo.objects.all()
# 构造上下文
context = {'books':books}
# 数据交给模板处理,处理完成后通过视图响应给客户端
return render(request, 'book/booklist.html', context)

8.2.创建模板

  • 读取上下文数据
  • 构造网页html文档 : 书籍信息以列表样式展示
在模板目录下:
vim templates/book/booklist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍列表信息</title>
</head>
<body>
<ul>
{% for book in books %}
<li>{{ book.name }}</li>
{% endfor %}
</ul>
</body>
</html>

8.3.配置URLconf

修改子应用目录中的urls.py文件

from django.conf.urls import url
from book.views import index,bookList
urlpatterns = [
url(r'^$',index),
# 匹配书籍列表信息的URL,调用对应的bookList视图
url(r'^booklist/$',bookList)
]

cd $HOME/bookmanager

启动服务: python manage.py runserver 0.0.0.0:8000

在浏览器输入http://192.168.1.101:8000/booklist/

即可看到在数据库的数据。

9.配置文件和静态文件

9.1 setting配置文件

BASE_DIR 属性:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。

DEBUG属性:

调试模式,创建工程后初始值为True,即默认工作在调试模式下。

作用:

  • 修改代码文件,程序自动重启

  • Django程序出现异常时,向前端显示详细的错误追踪信息

  • 而非调试模式下,仅返回Server Error (500)

注意:部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False和ALLOWED_HOSTS(访问ip)。

设置本地语言与时区

LANGUAGE_CODE = 'en-us' # 语言
TIME_ZONE = 'UTC' # 时区# 时区

将语言和时区修改为中国大陆信息

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

9.2 静态文件

项目中的CSS、图片、js都是静态文件。一般会将静态文件放到一个单独的目录中。

为了提供静态文件,需要配置两个参数:

  • STATICFILES_DIRS存放查找静态文件的目录
  • STATIC_URL访问静态文件的URL前缀

1) 在项目根目录下创建static目录来保存静态文件。

2) 在bookmanager/settings.py中修改静态文件的两个参数为

STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]

3)此时在static添加的任何静态文件都可以使用网址/static/文件在static中的路径来访问了。

例如,我们向static目录中添加一个index.html文件,在浏览器中就可以使用127.0.0.1:8000/static/index.html来访问。

9.3App应用配置

我们将此类添加到工程settings.py中的INSTALLED_APPS列表中,表明注册安装具备此配置属性的应用。

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 添加自己的子应用
'book.apps.BookConfig',
]

在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。

在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如

from django.apps import AppConfig
class BookConfig(AppConfig):
name = 'book'
  • AppConfig.name属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。

  • AppConfig.verbose_name属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示,如

    from django.apps import AppConfig
    class UsersConfig(AppConfig):
    name = 'book'
    verbose_name = '图书管理'
    
版权声明
本文为[Stick·连翼]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/lian95/p/14310360.html

  1. Centos7 installing Python 3.8
  2. Centos7 installing Python 3.8
  3. Django——图书管理系统(六)
  4. Django——图书管理系统(五)
  5. Django -- library management system (6)
  6. Django -- library management system (5)
  7. python批量插入数据小脚本
  8. Python batch insert data script
  9. ZoomEye-python 使用指南
  10. Zoomeye Python User's Guide
  11. 用Python写代码,一分钟搞定一天工作量,同事直呼:好家伙 - 知乎
  12. Using Python to write code, one minute to complete a day's workload, colleagues call: good guy - Zhihu
  13. Python 上的可视化库——PyG2Plot
  14. Pyg2plot: a visualization library on Python
  15. Python 上的可视化库——PyG2Plot
  16. Python实用代码-无限级分类树状结构生成算法
  17. Pyg2plot: a visualization library on Python
  18. Python utility code - infinite classification tree structure generation algorithm
  19. 奇技淫巧,还是正统功夫?Python推导式最全用法
  20. Pandas 的这个知识点,估计 80% 的人都得挂!
  21. 前后端分离有什么了不起,手把手教你用Python爬下来!
  22. 在 Azure 上执行一些简单的 python 工作
  23. 推荐 :利用Python的混合集成机器学习(附链接)
  24. Cunning or orthodox Kung Fu? The most complete usage of Python derivation
  25. It's estimated that 80% of pandas people have to hang up!
  26. What's so great about the separation of front and rear ends? Hand in hand teach you to climb down with Python!
  27. Doing some simple Python work on azure
  28. Recommendation: hybrid integrated machine learning using python (link attached)
  29. Learning PPO algorithm programming from scratch (Python version)
  30. Python OpenCV 图片模糊操作 blur 与 medianBlur
  31. Python OpenCV image blur operation blur and mediablur
  32. 成功解决cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: err
  33. Cv2.error solved successfully: opencv (4.1.2) C:: (projects / opencv Python / opencv modules / imgproc / SRC)\ color.cpp:182 : err
  34. Python 中使用 virtualenv 管理虚拟环境
  35. Using virtualenv to manage virtual environment in Python
  36. 如何使用Python执行系统命令?Python学习教程!
  37. How to use Python to execute system commands? Python tutorial!
  38. 快速掌握Python中的循环技术
  39. Quickly grasp the loop technology in Python
  40. Python主流Web框架之Tornado
  41. appium+python自动化63-使用Uiautomator2报错问题解决
  42. Tornado: the mainstream Python Web Framework
  43. Appium + Python automation 63 - using uiautomator2 to solve the problem of error reporting
  44. 爬虫+django,打造个性化API接口
  45. Crawler + Django to create personalized API interface
  46. 爬虫+django,打造个性化API接口
  47. Crawler + Django to create personalized API interface
  48. C、C++、Java、PHP、Python主要应用在哪里方面?
  49. C. Where are the main applications of C + +, Java, PHP and python?
  50. Python 无限级分类树状结构生成算法 「实用代码」
  51. Python infinite classification tree structure generation algorithm "practical code"
  52. 【Azure 存储服务】Python模块(azure.cosmosdb.table)直接对表存储(Storage Account Table)做操作示例
  53. [azure storage service] Python module( azure.cosmosdb.table )Direct operation example of storage account table
  54. 【Azure 存储服务】Python模块(azure.cosmosdb.table)直接对表存储(Storage Account Table)做操作示例
  55. [azure storage service] Python module( azure.cosmosdb.table )Direct operation example of storage account table
  56. openpose c++ 配置教程 + python api
  57. Openpose C + + configuration tutorial + Python API
  58. PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)
  59. 使用python javaSerializationTools模块拼接生成 8u20 Gadget
  60. 萌新入门之python基础语法