Django

Django概述

Django简介
  • Django是一个开放源代码的Web应用框架,由Python写成
  • 最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站
  • 2005年7月在BSD许可证下发布
框架介绍

Django 框架的核心组件有:

  • 用于创建模型的对象关系映射
  • 为最终用户设计的完美管理界面
  • 一流的 URL 设计
  • 设计者友好的模板语言
  • 缓存系统
MTV模式
  • Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同
    • M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)
    • T 代表模板 (Template):负责如何把页面展示给用户(html)
    • V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template
  • 除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template
MTV响应模式
  • Web服务器(中间件)收到一个http请求
  • Django在URLconf里查找对应的视图(View)函数来处理http请求
  • 视图函数调用相应的数据模型来存取数据、调用相应的模板向用户展示页面
  • 视图函数处理结束后返回一个http的响应给Web服务器
  • Web服务器将响应发送给客户端
访问
查询
调用函数
操作db
返回数据
发送到
返回页面
client
server
URLConf路由系统
Views视图
Model模型
Template模板

安装django

python虚拟环境

• 每个项目都需要安装很多库,当项目结束后这些库不需要了,该如何清理?
• 在同一个主系统内,需要同时安装django1.11.6和django2.0.5如何实现
• 有了python虚拟环境,这些问题将迎刃而解

使用虚拟环境

  • Python3中已经自带虚拟环境,只要创建并激活即可
[root@localhost ~]#	mkdir pyproject
[root@localhost ~]#	cd	pyproject/
[root@localhost pyproject]#	python3	-m	venv django_env
[root@localhost pyproject]#	source	django_env/bin/activate
(django_env)[root@localhost pyproject]#	

安装django

  • Django不同版本有微小不同,本次使用1.11.6版本
(django_env)[root@localhost pyproject]#	pip	install django==1.11.6
  • 如果安装过于缓慢,可以使用国内镜像站点
(django_env)[root@localhost pyproject]#	cat ~/.pip/pip.conf
[global]
index-url=http://pypi.douban.com/simple/
[install]
trusted-host=pypi.douban.com

验证django

  • Django安装完毕后,就可以导入相关模块了
(django_env)[root@localhost pyproject]#	python
Python	3.6.4	(default,	Apr 27	2018,	08:26:23)	
[GCC	4.8.5	20150623	(Red Hat 4.8.5-16)]	on	linux
Type	"help",	"copyright",	"credits"	or "license"	for more	information.
>>>	import	django
>>>	django.__version__
'1.11.6'

一般为了方便,可以直接使用pycharm安装,具体安装步骤,自行搜索

管理项目

创建项目
  • Djanog可以自动生成一些代码,这些代码创建一个Django项目:一个Django实例的设置集合,包括数据库的配置、Django有关的选项和应用有关的选项
(django_env)[root@localhost pyproject]#	django-admin startproject mysite
(django_env)[root@localhost pyproject]#	tree mysite
mysite/                   # 项目的根目录
├── manage.py             # 项目的管理文件
├── mysite                # 项目的配置目录
│   ├── __init__.py       # 初始化文件
│   ├── settings.py       # 配置文件
│   ├── urls.py           # URLConf路由映射文件
│   └── wsgi.py           # 部署服务器时使用
└── templates             # 模板网页的目录

2 directories, 5 files
项目文件说明
  • 外层的mysite/根目录仅仅是项目的一个容器。 它的名字与Django无关;可以将其重命名为你喜欢的任何内容
  • manage.py:一个命令行工具,可以使用多种方式对Django项目进行交互。 可以在django-admin和manage.py中读到关于manage.py的所有细节
  • 内层的mysite/目录是项目的真正的Python包。 它是导入任何东西时将需要使用的Python包的名字
    (例如 mysite.urls)
  • mysite/init.py:一个空文件,它告诉Python这个目录应该被看做一个Python包
  • mysite/settings.py:该Django 项目的设置/配置。Django settings 将告诉你这些设置如何工作。
  • mysite/urls.py:此Django项目的URL声明;Django驱动的网站的“目录”
  • mysite/wsgi.py:用于项目的与WSGI兼容的Web服务器入口
开发服务器
  • Django自带一个开发服务器,默认运行于8000端口
  • 该开发服务器不要应用在生产环境下
(django_env)[root@localhost mysite]# python	manage.py runserver
Performing	system	checks...
System	check	identified	no	issues	(0	silenced).
You	have	13	unapplied	migration(s).	Your	project	may	not	work	properly	
until	you	apply	the	migrations	for	app(s):	admin,	auth,	contenttypes,	
sessions.
Run	'python	manage.py migrate'	to	apply	them.
May	09,	2018	- 23:13:04
Django version	1.11.6,	using	settings	'mysite.settings'
Starting	development	server	at	http://127.0.0.1:8000/
Quit	the	server	with	CONTROL-C.
访问django

在这里插入图片描述

修改设置
  • Django默认只允许本机访问、英文环境,这些均可在settings.py中进行修改
# mysite/settings.py
DEBUG = True   # 生产环境应该改为False
ALLOWED_HOSTS = '*'    # 允许所有的客户端访问
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

在这里插入图片描述
修改访问的端口为80端口,标识所有的主机都可以访问

(django_env) [root@localhost mysite]# python manage.py runserver 0:80
# 0:80   -> 0.0.0.0:80
访问后台
  • 一旦创建了项目,django自动生成了后台管理页面
    http://127.0.0.1/admin

管理数据库

django后台可以使用各种类型的数据库,默认用的是sqlite数据库,不做任何修改,这个数据库直接可以用。

配置django使用mysql数据库:

[root@localhost mysite]# mysql -uroot -p'123456'
mysql> CREATE DATABASE djtest DEFAULT CHARSET utf8;

# 修改配置文件连接数据库的声明
# mysite/settings.py
DATABASES = {
   
    'default': {
   
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'djtest',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

# 初始化pymysql
# mysite/__init__.py
import pymysql
pymysql.install_as_MySQLdb()

# 生成数据库的表。jdango默认已经集成了很多应用,如用户管理的应用,这些内建的应用也需要把数据保存到数据库。
(django_env) [root@localhost mysite]# python manage.py makemigrations
(django_env) [root@localhost mysite]# python manage.py migrate 
mysql> use djtest;
mysql> show tables;   # 查看生成的表
创建管理员帐户
  • 访问后台需要有超级用户身份
  • 超级用户需要单独创建
  • 用户将写到数据库中
(django_env) [root@localhost mysite]# python manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: dj@163.com            
Password: 
Password (again): 
Superuser created successfully.
  • 创建好管理员用户后即可登陆后台
firefox 127.0.0.1/admin

管理应用

应用简介
  • 应用是一个Web应用程序,它完成具体的事项 ——比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用
  • 项目是特定网站的配置和应用程序的集合
  • 一个项目可以包含多个应用
  • 一个应用可以运用到多个项目中去
创建应用
  • 应用可以放在Python path上的任何位置
  • 可以在manage.py文件同级目录创建应用,以便可以将它作为顶层模块导入,而不是mysite的子模块
(django_env)[root@localhost mysite]# python manage.py startapp polls

投票应用的规划

激活应用
  • 创建应用后,需要将其安装到项目中,否则应用不会生效
  • 修改mysite/settings.py:
INSTALLED_APPS	=	[
	'django.contrib.admin',
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions',
	'django.contrib.messages',
	'django.contrib.staticfiles',
	'polls',
]
配置URLconf
  • 为了整洁起见,用户与polls相关的url都交给polls应用进行路由
  • 修改mysite/urls.py如下:
from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
	url(r'^admin/',	admin.site.urls),
	#导入polls目录(术语称作为包)中的urls模块
	url(r'^polls/',	include('polls.urls'))
]
应用路由
  • 创建polls应用的URLconf,配置访问polls应用首页的视图
  • 创建polls/urls.py,内容如下:

vim polls/urls.py

from django.conf.urls import url
from . import views
urlpatterns =	[
	url(r'^$', views.index, name='index'),
]
  • URL正则采用的是match操作
  • r'^hello':匹配以hello开头的任意URL,如:/helloabc
  • r'^hello/$':匹配hello且后面无信息的URL,如:/hello,/hello/
  • r'^$':匹配 / 即空URL,通常用来设定应用的根,即默认入口。如: http://IP:port 或者http://IP:port/
创建视图
  • 视图是URLconf路由到某一URL时执行的函数
  • 为上一步polls主页编写简单视图,编辑
    polls/views.py如下:
from django.http import	HttpResponse
#用户发给django的请求,函数必须提供一个参数进行接收
def index(request):
	return	HttpResponse(“Hi! 这是polls应用的首页。")
验证应用
  • 至此,用户已经可以访问polls应用的主页
(django_env) [root@localhost mysite]# python manage.py runseer 0:80
(django_env) [root@localhost mysite]# firefox 127.0.0.1/polls
修改函数,返回模板文件
# 修改函数的返回值,使用render函数返回模板文件
# polls/views.py
def index(request):
    return render(request, 'index.html')

# 创建模板文件
  # 模板文件的位置:
    # 项目目录下的templates目录
    # 应用目录下的templates目录
# templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>投票首页</title>
</head>
<body>
<h1>投票首页</h1>
</body>
</html>

刷新页面查看内容

编写问题详情页

  1. URL
# polls/urls.py
	... ...
    url(r'^\d+/$'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值