Django
- MVC - Model View Contriller
- 强制性的使应用程序的输入,处理和输出分开
- 核心思想:解耦
- 优点:减低各个模块之间的耦合性,方便变更,更容易重构代码,最大程度的实现了代码的重用
- MVT - Model View Template
- Django 的模式应该是MVT
- 安装命令
pip install django==1.11
B/S 浏览器服务
- C/S 客户端服务
virtualenv
- pip install virtualenv
- 安装env环境
- virtualenv –no-site-packages -p xxx 文件夹名
- –no-site-packages 表示纯净的python环境,不加的话会导入之前装过的包
- -p 路径 指定安装版本
- 在安装好的文件夹中找到Scripts文件打开里面的activate进入虚拟环境
- 退出虚拟环境deactivate
创建Django项目
- 在虚拟环境中 在自己准备创建项目的工作目录下
- 执行django-admin startproject 项目名
- 其中会有一个manage.py文件,这个文件里面是整个项目的控制中心
- 例如执行python manage.py runserver ip:端口运行项目
- 进入项目文件,里面会自动生成以下文件
- manage.py: 是Django用于管理本项目的管理集工具,之后站点运行,数据库自动生成,数据表的修改等都是通过该文件完成。
- init.py: 指明该目录结构是一个python包,暂无内容,在后期会初始化一些工具会使用到。
- settings.py: Django项目的配置文件,其中定义了本项目的引用组件,项目名,数据库,静态资源,调试模式,域名限制等
- urls.py:项目的URL路由映射,实现客户端请求url由哪个模块进行响应。
- wsgi.py:定义WSGI接口信息,通常本文件生成后无需改动
在settings.py中找到下面的代码,修改其中的语言和时间
LANGUAGE_CODE = 'zh-hans' #表示显示的是中文
TIME_ZONE = 'Asia/Shanghai' # UTC和北京时间相差8个小时,但又因为系统中没有北京时间,故写成上海时间
USE_I18N = True
USE_L10N = True
USE_TZ = True
创建app
- python manage.py startapp appname
- app
- init.py:初始化
- admin.py:管理后台注册模型
- apps.py: settings.py 里面注册app的时候需要使用到。一般不推荐使用
- from app.apps import AppConfig
- App
添加app
- 在项目的主目录下找到settings.py文件
- 在下面这个列表添加新建的app
- 新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'yisiyisi',
'stu'
]
定义一个接收请求的函数
- 在yisiyisi 下的views.py文件中
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
#函数中一定要传参数request,表示接收的请求
def first_hello(request):
#HttpResponse是在网页上输出内容相当于print
return HttpResponse('hello, world!')
def girl_hello(request):
return HttpResponse('hello, 美女')
为不同app设置不同路由
- 在主项目目录下找到urls.py
- 这样做可以给不同app指定不同的路由,方便管理和维护
from django.conf.urls import url, include
from django.contrib import admin
from yisiyisi import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
#include是指在app下的urls内容
url(r'yisiyisi/', include('yisiyisi.urls')),
url(r'stu/', include('stu.urls'))
连接路由和对应函数
- 为每一个函数指定一个独立的路由
- yisiyisi app中的urls.py文件
- 这个文件需要自己创建
# -*- coding:utf-8 -*-
from django.conf.urls import url
from yisiyisi import views
urlpatterns = [
#前面是路由,用符合正则表达式的规则,只要在网址栏中输入符合表达式的字符串都可以匹配到
url(r'hello/', views.first_hello),
url(r'hellogirl/', views.girl_hello)
]
迁移数据库
- python manage.py makemigrations
- python manage.py migrate
配置MySQL环境
- 修改settings.py的设置
- 因为我用的是MySQL数据库,所以将数据库对应设置修改如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'USER': 'root',
'PASSWORD' : '******',
'PORT': '3306',
'NAME' : 'firsthello'
}
}
关联数据库
- 创建一个新的app. stu
- 打开其中的models.py文件,并按如下代码设置初始的表
from django.db import models
# Create your models here.
class Student(models.Model):
name = models.CharField(max_length=20)
sex = models.BooleanField()
class Meta: #元,模型对应数据库中的stu表
db_table = 'stu'
定义一个添加数据的函数
- 在stu下设置其中的views.py文件
- 定义一个函数,在接收到请求的时候,将数据录入数据库
from django.http import HttpResponse
from django.shortcuts import render
from stu.models import Student
# Create your views here.
def second_hello(request):
stu = Student()
stu.name = '张三'
stu.sex = 1
stu.save()
return HttpResponse('hello,china')
- 这些设置好之后,输入迁移命令,迁移数据库