Django学习(一)

预备

Ubuntu基本使用
Linux用户权限:root 普通用户(申请root权限 sudo)
LInux系统中有两种常用系统包管理工具yum和apt。
低版本中安装包使用apt-get,新的现在只需要写apt就OK了
apt指令(兼容apt-get和apt-cache)
apt install xxx 安装xxx软件
apt remove xxx 移除xxx软件
apt autoremove xxx 移除xxx 软件和自动安装且不使用的包

Ubuntu基本使用
control+alt+t 打开终端 tree 树形查看
cd 进入目录 mkdir 创建文件夹
ls 查看文件 rm 删除
touch (刷新文件时间戳,vi也是,文件不存在就会创建)创建文件

pip:python的一个包管理工具
virtualenv:python专属的虚拟环境,用来保持一个干净的环境
mysql:常用数据库

了解Django

Django 简介
可以去GitHub上搜python,了解库 web提升:https://github.com/donnemartin/system-design-primer
Django发布于2005年,是当前python世界里最负盛名且成熟的网络框架。最初用来制作在线新闻的web站点。
Django是一个用Python编写的开放源代码的web应用框架(源代码是开源的,遵守BSD版权)。采用了MVC的框架模式,也有很多人把它称为MVT(mtv)模式。
官方网站:https://www.djangoproject.com/

MVC设计模式
一种软件设计典范,用一种业务逻辑,使数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面与用户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来用于映射传统的输入,处理和输出在一个逻辑的图形化界面结构中。
核心思想:解耦
优点:降低模块之间的耦合性,方便变更,更容易重构代码,最大程度实现了代码的重用。

MVC(Model,View,Controller)
Model:用于封装与应用程序的业务逻辑相关的数据及对数据的处理方法,是web应用程序中用于处理应用程序的数据逻辑部分,Model通常只提供功能性的接口,通过这些接口可以获取Model的所有功能。
View:负责数据的显示和呈现,View是对用户的直接输出。
Controller:负责从用户端收集用户的输入,可以看成提供View的反向功能,主要处理用户交互。
Django学习(一)_第1张图片
Django学习(一)_第2张图片
MTV模式简介
本质上与MVC没什么差别,就是各组件之间为了保持松耦合关系,只是定义上有些许不同。
Model:负责业务对象与数据库(ORM)的对象。
Views:负责业务逻辑,并在适当的时候调用Model和Template
Template:负责把页面展示给用户。
注意:Django中还有一个url分发器(也可以叫路由),主要用来将一个个URL页面的请求分发给不同的view进行处理,view再调用相应的model和template。

  • 还有:MVP:mvp的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
  • MVVM:model-view-viewmodel VM:双向绑定 Vue
    Django学习(一)_第3张图片

Hello world

Linux Ubuntu 下进行:
mkvirtualenv GP2 -p /usr/bin/python3
pip install django==1.11.7
pip freeze 看装上没?
因为Django1.11支持python2和python3 而Django2.2只支持python3所以学习1.11
创建一个Django项目
django-admin startproject xxx 创建一个名字为xxx的工程
查看默认目录结构 进入目录tree

|--------HelloWorld
|              |-------__init__.py
|              |-------settings.py
|              |-------urls.py
|              |-------wsgi.py
|-------manage.py

python manage.py runserver 运行
打开浏览器访问http://127.0.0.1:8000/ 就可以访问了
python manage.py startapp App #创建一个项目
Django学习(一)_第4张图片
SQLite:

  • 轻量级的数据库
  • 常用于嵌入式系统
  • 常用于小型项目
  • 和mysql相似度百分之九十五以上

Django目录介绍

manage.py:是Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。

HelloDjango/init.py告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可能会用到

HelloDjango/settings.py Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等。

BASE_DIR:动态获取目录
SECRET_KEY:秘钥 需要加密的时候使用
DEBUG:调试模式
ALLOWED_HOSTS=[] 允许访问的ip "*"表示任何可以访问
INSTALL_APPS:安装的应用
MIDDLEWARE:中间件
ROOT_URLCONF:跟路由

HelloDjango/urls.py 维护项目的URL路由映射,即定义当客户端访问时由哪个模块进行响应。

urlpatterns:路由

HelloDjango/wsgi.py 定义WSGI的接口信息,主要用于服务器集成,通常本文件生成后无需改动。
用pycharm打开项目一定要打开manage的上一级

测试服务器的启动

python manager.py runserver [ip:port]

可以直接进行服务运行 默认执行起来的端口是8000

也可以自己指定ip和端口

ip指定为0.0.0.0的时候,匹配本机的全部ip

浏览器访问:localhost:8000 可以看到服务器启动成功

迁移数据,pycharm连接数据库

迁移的概念:就是将模型映射到数据库的过程

生成迁移:python manager.py makemigrations

执行迁移:python mananger.py migrate

介绍DataBase模块,可以直接连接操作数据库Sqlite和MySQL

    'ENGINE':'django.db.backends.mysql',
    'NAME':'Learn',
    'USER':'root',
    'PASSWORD':'rock1204',
    'HOST':'127.0.0.1',
    'PORT':'3306',

连接sqlite 进行迁移 迁移之后django_migrations表里就会有数据了
id app name applied时间

安装连接数据库驱动

在python 2.x

  • pip install mysql-python

在python 3.x

  • pip install pymysql
    安装后还需要在__init__.py中添加初始化代码
    import pymysql
    pymysql.install_as_MySQLdb()

创建一个应用

python manager.py startapp XXX
创建名称为XXX的应用

创建之后可以通过tree来看一下目录结构
Django学习(一)_第5张图片
使用应用前需要将应用配置到项目中,在settings.py中将应用加入到INSTALLED_APPS选项中

项目目录介绍

init.py:其中暂无内容,使得app成为一个包

admin.py:管理站点模型的声明文件,默认为空

apps.py:应用信息定义文件,在其中生成了AppConfig,该类用于定义应用名等数据

models.py:添加模型层数据类文件

views.py:定义URL相应函数(路由规则)

migrations包:自动生成,生成迁移文件的

tests.py:测试代码文件

现在我们需要将APP注册到项目工程中,在HelloWorld中的settings.py总的INSTALLED_APPS下加入’App’

基本视图

首先我们在views.py中建立一个路由响应函数
from django.http import HttpResponse

def welcome(request):
return HttpResponse(‘HelloDjango’);

接着我们在urls中进行注册
from App import views
url(r’^welcome/’,views.welcome)

基于模块化的设计,我们通常会在每个app中定义自己的urls

在项目的urls中将app的urls包含进来
from django.conf.urls import include
url(r’^welcome/’,include(‘App.urls’))

小总结

  • 创建工程
    ----startproject
  • 创建应用
    ----startapp
  • 工程的settings中注册APP
    ----将所有资源加载到项目中
    ----如果只使用了视图函数,可以不注册
  • 在应用中编写视图函数
  • 在路由中注册视图函数

基本模板

模板实际上就是我们用HTML写好的页面 在APP中加个templates文件夹

创建模板文件夹,两种,在工程目录的需要注册
settings中的TEMPLATES中的DIRS中添加
os.path.join(BASE_DIR,‘templates’)
在模板文件夹中创建模板文件 two/books.html

def index(request):
	return render(request,'two/books.html')

在views中去加载渲染模板
两种方法:实际上需要两步:1 加载模板 2渲染模板

  1. from django.template import loader加载器
    template = loader.get_template(‘xxx’)加载
    return HttpResponse(template.render()) 渲染
  2. return render(request,‘xxx.html’)

定义模型

定义年级

		class Grade(models.Model):
			gname = models.CharField(max_length=10)
    			gdate = models.DateTimeField()
    			ggirlnum = models.IntegerField()
    			gboynum = models.IntegerField()
    			isDelete = models.BooleanField()

定义学生

		class Students(models.Model):
    			sname = models.CharField(max_length=20)
    			sgender = models.BooleanField(default=True)
    			sage = models.IntegerField()
    			sinfo = models.CharField(max_length=20)
    			isDelete = models.BooleanField(default=False)
    			# 关联外键
    			sgrade = models.ForeignKey(Grade)

迁移

  • 自带迁移系统
  • 需要生成迁移文件 python manage.py makemigrations
  • 执行迁移 python manage.py migrate
    数据库中迁移表中会记录迁移过程
  • 迁移文件存的文件夹: 本质是一个包
  • 迁移记录 django_migrations’
  • 每次迁移
    ------先生成 根据既有的迁移文件和迁移记录
    ------执行迁移 查询迁移记录
    Django学习(一)_第6张图片

如果模型写错了,则需要将迁移文件删除,再建个migrations文件夹,并且将数据库中的迁移表中的迁移记录删除(记得submit),再生成迁移,执行迁移
可以有多个app python manage.py startapp Two

from Two import views as two_views
urlpatterns={
	url(r'two/index/',two_views.index)
}

这种方式不太方便,可以在Three APP下创一个urls.py 写上

from django.conf.urls import 
from Tree import views
urlpatterns=[
	url(r'^index/',views.index),
]
#在工程项目 urls.py中进行注册
from django.conf.urls import url,include
urlpatterns=[
	url(r'^three/',include('Tree.urls)),
]

测试数据模型

进入python shell:python manage.py shell

导入包:

  • from App.models import *
  • from django.utils import timezone
  • from datetime import *

数据测试增删改查
查询: 类名.objects.all()
Grade.objects.all()

插入数据: 
对象.save()
	grade_one = Grade()
	grade_one.gname='python1705'					grade_one.gdate=datetime(year=2017,month=7,day=28)
	grade_one.ggirlnum=5
	grade_one.gboynum = 60
	grade_one.save()

测试数据模型

查看某个指定对象
类名.objects.get(pk=1)
Grade.objects.get(pk=1)

修改数据
模型对象.属性=属性值
模型对象.save()
grade_one.gboynum = 55
grade_one.save()

删除数据
模型对象.delete()
grade_one.delete()

测试关联对象
stu = Students()
stu.sname=‘rock’
stu.sgender=True
stu.sage=20
stu.sinfo=‘小天才’
stu.sgrade=grade_one
stu.save()

获得关联对象集合:获取班级中的所有学生
对象名.关联的类名小写_set.all()
grade_one.student_set.all()

结合使用

在urls配置路由规则

在views中调用models中的函数进行查询

books=Book.objects.all()
data={
	"books":books
	}
	return render(request,'app/Books.html',context=data)

在views中对模板进行渲染

模板获取views中传过来的数据

    {% for book in books %}
  • {{ book.b_name }}
  • {% endfor %}

渲染后的模板显示给用户

挖坑
{{ xxx }}
表达式 {% for student in students %}
{{student}}
{% endfor %}

MTV数据加载

  • urls开始
    定义一个路由
  • urls直接绑定视图函数
  • 从数据库查询数据models
  • 渲染模板

你可能感兴趣的:(Django学习,django,python)