1.Django:即是一个开放源代码的Web应用框架,由Python写成,采用了MVC的框架模式思想,但是有自有的名字MVT,中文文档:https://docs.djangoproject.com/zh-hans/2.0/。
MVC框架如图:
Django模式如下:
ORM模型:Django中嵌了ORM框架,ORM框架可以将类(如图书类)和表(如mysql数据库的图书表)对应起来,只需要通过类操作,就可以操作数据库的表,且会自动生成数据库的表。
2. 安装python第三方包:下载python,cmd->py查看python版本->cd C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts进入srcipts目录->pip install 第三方包名。
注意:C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts是默认安装的Py地址。
3. 虚拟环境:就是真实python环境的复制版本。
4. 安装django,创建django项目:
4.1 安装django: 在C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts命令行下输入pip install django。
4.2 创建django项目:在C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts命令行下输入
django-admin startproject HelloWorld(项目名)
4.3 创建django项目(即HelloWorld(项目名))的一个应用(Django中一个功能模块对应一个应用,如用户模块,商品模块,购物车模块,订单模块):如在HelloWorld文件夹的命令行下输入py manage.py startapp booktest(应用名,如图书模块)。
4.4 创建Django项目(helloworld)与应用(booktest)直接的联系:进行应用注册。在helloworld/helloworld下的settings.py中进行设置。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booktest', #进行应用(功能模块)的注册。
]
4.5 启动Django项目: 在Django项目(hellowworld)文件命令行下,执行输入py manage.py runserver。然后返回一个浏览器打开的ip地址,默认是浏览器输入127.0.0.1:8000即可。
4.6 创建模型类(如图书信息BookInfo):相当于对应数据库的表名(BookInfo)。
from django.db import models
# Create your models here.
#创建与数据表对应的模型类
#1.创建一个图书类BookInfo,该类必须继承models.Model,才是模型类
class BookInfo(models.Model): #对应数据库的表名(BookInfo)
#1.1 图书名称(btitle)对应数据表(BookInfo)的列名,CharFiled表示列类型为字符串,max_length表示最大长度字符串为20
btitle=models.CharFiled(max_length=20)
#1.2 图书出版日期(bpub_data)对应数据表(BookInfo)的列名,DateFiled表示列类型为日期类型
bpub_data=models.DateFiled()
#1.3 注意:不需要创建表(BookInfo)的id,Django会自动生成
#2.创建一个英雄人物类,该类必须继承models.Model,才是模型类
class HeroInfo(models.Model): #对应数据库的表名(BookInfo)
#2.1 英雄姓名(hname)对应数据表(HeroInfo)的列名,CharFiled表示列类型为字符串,max_length表示最大长度字符串为20
hname=models.CharFiled(max_length=20)
#2.2 英雄性别(hgender)对应数据表(HeroInfo)的列名,BooleanFiled表示列类型为布尔类型,default默认值
hgender=models.BooleanFiled(default="男")
#2.3 英雄备注(hcomment)对应数据表(HeroInfo)的列名,CharFiled表示列类型为字符串,max_length表示最大长度字符串为20
hcomment=models.CharFiled(max_length=20)
#2.4 关系属性(hbook)对应数据表(HeroInfo)的列名,与图书类BookInfo有外键关联(ForeignKey)
hbook=models.ForeignKey("BookInfo")
4.7 将模型类生成表:
第一步生产迁移文件:在Django项目命令行下输入执行py manage.py makemigrations。会放在booktest/migrations文件下自动生成0001_initial.py。
第二步执行迁移生成表:在Django项目命令行下输入执行py manage.py migrate。
4.8 在终端命令行中执行该模型类的增删该查:在Django项目命令行下输入执行py manage.py shell。进入终端操作:
form booktest.models import BookInfo
#1. 实例化一个BookInfo模型类
b=BookInfo()
#2. 修改/获取模型类中列的值
b.btitle="天龙八部"
from datetime import date
b.bpub_date=date(2018.10.28)
#3. 保存修改的执行
b.save()
#4. 实例化一个HeroInfo模型类
h=HeroInfo()
#5. 赋值
h.hname="段誉"
h.hgender="男"
h.hcomment="六脉神剑"
#6. 外键关联BookInfo模型类的实例化
h.hbook=b
#7.保存
h.save()
5. Django后台管理:
5.1 本地化:即在settings.py中修改时间和语言(默认是美国时间和英文):
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans' #使用中文
#TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shangehai' #没有北京时间,改成亚洲上海时间
5.2 创建管理员:在Django项目命令行下输入执行py manage.py createsuperuser->在命令行输入姓名,邮箱,密码->
然后py manage.py runserver启动服务器->在浏览器输入127.0.0.1:8000/admin/即为Django登录页面。
5.3 在admin.py里创建注册模型类:可以直接显示在浏览器视图中。
6. 配置路由:如127.0.0.1:8000/admin或127.0.0.1:8000/index..............。
6.1 在helloworld/helloworld/urls.py里面配置: 应用(booktest)的路由。
from django.contrib import admin
from django.urls import path,include,url
#项目的urls文件
urlpatterns = [
path('admin/', admin.site.urls), #配置项目,即127.0.0.1:8000/admin显示的视图页面。
url(r'^',include('booktest.urls')), #配置除了127.0.0.1:8000/admin路径之外的其他路径在booktest/urls.py文件里面查找。
]
6.2 在helloworld/booktest/urls.py里面配置: 应用(booktest)里面的视图路由。
from django.urls import url
from booktest import views
#配置views.py里面的index/index2的路径
urlpatterns = [
url(r'^index$',views.index), #配置127.0.0.1:8000/index路径
url(r'^index2$',views.index2), #配置127.0.0.1:8000/index2路径
]
6.3 在helloworld/booktest/views.py里面配置: 应用(booktest)里面的视图。
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
#1.定义视图函数,HttpResponse
#2.定义url配置,建立url和视图的关系
def index(request): #对应视图127.0.0.1:8000/index
return HttpResponse("这是在浏览器输入127.0.0.1:8000/index时,页面显示的内容")
def index2(request): #对应视图127.0.0.1:8000/index2
return HttpResponse("这是在浏览器输入127.0.0.1:8000/index2时,页面显示的内容")