一,MVC与MTV模型
MVC:把web应用分为模型Model,控制器Controller和视图View三层。
Model模型:负责在数据库中存取数据(通过orm),并且把数据传递给视图VIew
Controller控制器:负责处理用户输出的数据,决定传递指令给模型还是给视图
VIew视图:向用户展示信息。
MTV:Django的的MTV模式本质和MVC一样,只是定义上不同而已
M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
ps:除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。
二,下载Django
方式一:pip install django == 1.11.11(指定版本号)
方式二:用pycharm中的settings进行安装
方式三:用pycharm的Terminal命令进行安装
三,创建django项目工程以及应用
命令行创建:
创建django项目:django-admin startproject 项目名
创建app应用:python3 manage.py startapp app01
启动django项目:python3 manage.py runserver
ps:用命令行创建django默认不会自动创建templates文件夹需要你手动自己创建(注意改文件夹路径是否被添加配置文件中)
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', ], }, }, ]
pycharm创建:
创建django项目:FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理
创建app:pycharm命令行创建:python3 manage.py startapp app01
启动:点击绿色小箭头
注意事项:
1.计算机的名称不能有中文
2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面
3.项目名不能起中文
4.用django一定要保证只有一个在运行状态
5.一定记得清浏览器的缓存
四,Django各个文件的作用
在创建app时需要配置文件中注册才能生效!
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01' # 简写 # 'app01.apps.App01Config' # 全称(两者都可以使用) ]
应用名:
migrations :数据库迁移记录相关数据
admin.py:django后台管理相关
models.py :模型表相
views.py:视图函数相关
项目名:
settings.py :配置文件
urls.py:路由与视图函数的映射关系
templates:
项目用到的所有的html文件都放在这个文件夹里面
manage.py
django入口文件
五,三个最基本的操作
HttpResponse:返回字符串
render:返回一个html页面
redirect:重定向
案例:
app01下的view.py
from django.shortcuts import render,HttpResponse,redirect # Create your views here. def index(request): # 返回字符串 return HttpResponse("你好啊 我的奴隶!") def reg(request): user_dict = {'name':'jason','password':'123'} # 返回一个html文件 # return render(request,'reg.html',{'user_dict':user_dict}) return render(request,'reg.html',locals()) # 上面所有的信息 def login(request): # 重定向(转向第三方网址) return redirect('http://www.xiaohuar.com')
同时MyDjango下面的urls.py添加
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^reg/', views.reg), url(r'^login/', views.login), url(r'^xxx/', views.xxx), ]
ps:django识别到你的代码变话,然后自动重启,但是有时候反应速度比较慢。最好手动重启,也可以多刷新以及浏览器。
如何用Django 来操作mysql
第一步:修改settings.py的配置信息(默认为sqlite3,改为mysql):
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 修改数据库引擎 'NAME': 'my_django', # 定义数据库名 'USER':'root', # 用户名 'PASSWORD':'641220', # 密码 'HOST':'127.0.0.1', # IP 'PORT':'3306', # mysql端口 } }
第二步:在工程名的__init__文件下如下配置:
import pymysql pymysql.install_as_MySQLdb()
第三步:在操作数据的应用下的models.py中如下设置表名,字段等等:
from django.db import models __author__ = 'root' # Create your models here. from django.db import models class Student(models.Model): """ 创建如下几个表的字段 """ # 学号 primary_key=True: 该字段为主键 studentNum = models.CharField('studentNum', primary_key=True, max_length=15) # 姓名 字符串 最大长度20 name = models.CharField('name', max_length=20) # 年龄 整数 null=False, 表示该字段不能为空 age = models.IntegerField('age', null=False) # 性别 布尔类型 默认True: 男生 False:女生 sex = models.BooleanField('sex', default=True) # 手机 unique=True 该字段唯一 mobile = models.CharField('mobile', unique=True, max_length=15) # 创建时间 auto_now_add:只有在新增的时候才会生效 createTime = models.DateTimeField(auto_now_add=True) # 修改时间 auto_now: 添加和修改都会改变时间 modifyTime = models.DateTimeField(auto_now=True) # 指定表名 不指定默认APP名字——类名(app_demo_Student) class Meta: db_table = 'student'
第四步:手动在mysql中创建刚刚设置的数据库(数据库名用刚刚在settings中使用的)
第五步:生成一个迁移文件,在终端中输入:python3 manage.py makemigrations
第六步:生成成功之后会在migrations中生成一个0001_initial.py文件。然后再向终端中输入:python3 manage.py migrate
这样表就创建成功了。
查询数据:
第一步:首先再view中定义一个查询函数,取出想要的数据:
def select(request): # 查询name = tom1的数据 # sql语句已经被django封装好了 result = Student.objects.filter(name='tom1') """ result为<class 'django.db.models.query.QuerySet'>的对象 需要进行数据处理 """ user_list = [] for i in result: content = {'studentNum': i.studentNum, 'name': i.name, 'sex': i.sex} user_list.append(content) print(user_list) return render(request,'reg.html',{'user_list':user_list})
第二步:使用render将数据放在html文件,并显示:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <table class="table table-hover table-striped table-bordered"> <thead> <tr> <th>id</th> <th>name</th> <th>sex</th> </tr> </thead> <tbody> {% for user in user_list %} <!--[{},{},{},{}]--> <tr> <td>{{ user.studentNum }}</td> <td>{{ user.name }}</td> <td>{{ user.sex}}</td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
ps:别忘了在urls.py文件中配置新的url后缀。
from django.conf.urls import url from django.contrib import admin from app03 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^insert/',views.insert), url(r'^select/',views.select) # 调用查询数据的函数 ]