django_1

2023-03-07 14:16:30 浏览数 (2)

文章目录
  • 1.CS/BS简介
  • 2.MVC
  • 3.MTV
  • 4.Django
    • 简介
    • 虚拟环境
    • 虚拟化技术
    • 安装
    • 创建django项目
    • 编写第一个请求
    • 拆分路由器
  • 5.模板显示
  • 6.DML
  • 7.修改数据库
  • 8.django shell
  • 9.数据级联-一对多
  • 作业:

1.CS/BS简介

概念:

代码语言:javascript复制
BS:B browser 浏览器   S server  服务器   主流
CS:C client  客户端   S server  服务器
B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。

CS/BS区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sAFTelYm-1598312881347)(C:UserslijingActionDesktopSH-1903-Djangoday01docimage-20190720173825832.png)]

CS/BS应用语言:

代码语言:javascript复制
CS/BS
	客户端和服务器的交互模型
		Client
			客户端
		Browser
			浏览器
		Server
			Web后端
				python
					django     8
					flask      1
					tornado    1
				java
					struts2/struts1
					hibernate
					spring
					springmvc
					mybatis
					springboot
					springclude
				php
					yii
					ci
					thinkphp
2.MVC
代码语言:javascript复制
MVC
	简介:
		MVC开始是存在于桌面程序中的,M是指业务模型 model,V是指用户界面 view,C则是控制器 controler,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新
实现了模型层的复用
	核心思想: 
		解耦合
	面向对象语言:高内聚  低耦合
	Model
		模型
		封装数据的交互操作
			CRUD
	View
		视图
		是用来将数据呈现给用户的
	Controller
		控制器
		接受用户输入输出
		用来协调Model和View的关系,并对数据进行操作,筛选
	流程
		控制器接受用户请求
		调用模型,获取数据
		控制器将数据展示到视图中
3.MTV
代码语言:javascript复制
MTV
	也叫做MVT
	本质上就是MVC,变种
	Model
		同MVC中Model
	Template
		模板
		只是一个html,充当的是MVC中View的角色,用来做数据展示
	Views
		视图函数
		相当于MVC中Controller
4.Django
简介
代码语言:javascript复制
Django是一个开放源代码的Web应用框架,它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
	重量级,替开发者想了太多的事情,帮开发者做了很多的选择,内置了很多的功能
官方网站
	http://www.djangoproject.com
使用版本1.11.7
	LTS:长期支持版本
	以后再学2.2 LTS
虚拟环境
代码语言:javascript复制
虚拟环境
	mkvirtualenv
		创建虚拟环境
	deactivate
		退出虚拟环境
	workon
		进入虚拟环境
	rmvirtualenv
		删除虚拟环境
		
注意:ubuntu16版本和ubuntu18版本的虚拟环境修改区别
          # 以前的配置路径(ubuntu16.04)
          source /usr/local/bin/virtualenvwrapper.sh   
          #ubuntu18.04中的配置路径
          source ~/.local/bin/virtualwrapper.sh
虚拟化技术
代码语言:javascript复制
虚拟化技术
	(1)虚拟机      
	(2)虚拟容器
		Docker  
			支持很多种语言
	(3)虚拟环境--迷你
		python专用
		将python依赖隔离
安装
代码语言:javascript复制
	pip install django
		pip install django==1.11.7   一定要使用==
		pip install django==1.11.7 -i https://pypi.douban.com/simple  豆瓣源
	查看django是否安装成功
		pip freeze
		pip list
		进入python环境
			import django
			django.get_version()
创建django项目
代码语言:javascript复制
django-admin startproject 项目名字
        tree命令观察项目结构
            如果未安装   sudo apt install tree
代码语言:javascript复制
项目结构
	项目名字
		manage.py
			管理整个项目的文件
			以后的命令基本都通过他来调用
		项目名字
			__init__
				python包而不是一个文件夹
			settings
				项目全局配置文件
					ALLOWED_HOST=["*"]
					修改settings
						LANGUAGE_CODE='zh-hans'
						TIME_ZONE='Asia/Shanghai'
			urls
				根路由
					url(p1,p2)
			wsgi
				用在以后项目部署上,前期用不到
				服务器网关接口
				webserver gateway interface
代码语言:javascript复制
启动项目
	python manage.py runserver
		使用开发者服务器启动项目
		默认会运行在本机的 8000端口上
		还可以添加参数[ [ ip: ] port ]
			0.0.0.0  代表本机所有ip
			0.0.0.0:8000
			直接写端口号
代码语言:javascript复制
创建一个应用
	python manage.py startapp App/django-admin startapp App
	App结构
		__init__
		views
			视图函数
				视图函数种参数是request  方法的返回值类型是HttpResponse
		models
			模型
		admin
			后台管理
		apps
			应用配置
		tests
			单元测试
		migrations
			__init__
			迁移目录
编写第一个请求
代码语言:javascript复制
1.编写一个路由
      url(p1, p2)
              url(r'^index/',views.index),
      p1 正则匹配规则
      p2 对应的视图函数
2.编写视图函数
	(1)本质上还是一个函数
		def index(request):
    		return HttpResponse('123')
		要求:只是默认第一个参数是一个request,必须返回一个response
	(2)返回值:
		HttpResponse()
			HttpResponse('123')
			HttpResponse('<h1>123</h1>')
	    render
			在App下创建templates
				注意名字是固定的,不能打错单词
			render方法的返回值类型也是一个HttpResponse类型的
			要求:
				第一个参数是request,第二个参数的是页面
	********注意需要在settings里的INSTALLED_APPS设置App路径*****
	将应用注册到项目的settings中INSTALLED_APPS中
                      写法可以直接写'App'
                      也可以写‘App.apps.AppConfig’
3.模板配置有两种情况
		①在App中进行模板配置
		  - 只需在App的根目录创建templates文件夹即可
		  -必须在INSTALLED_APP下安装app
		②在项目目录中进行模板配置
		- 需要在项目目录中创建templates文件夹并标记
		- 需要在settings中进行注册  settings--》TEMPLATES--》DIRS-					    												os.path.join(BASE_DIR,'templates')
		开发中常用项目目录下的模板    理由:模板可以继承,复用
拆分路由器
代码语言:javascript复制
	python manager.py starpapp  Two
	加载路由的方式
		INSTALLED_APPS---》‘Two’
		INSTALLED_APPS---》‘Two.apps.TwoConfig’  版本限制 1.9之后才能使用
	创建urls
		urlpatterns = [
    		url(r'^index/',views.index)
		]
	创建views方法
	主路由引用
		    url(r'^two/',include('Two.urls')),
	访问url
		127.0.0.1:8000/two/index/

工作机制

代码语言:javascript复制
1.用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls .py

2.当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。

3.然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)

4.最后该view函数负责返回一个HttpResponse对象。
5.模板显示
代码语言:javascript复制
显示在模板中
	先挖坑
		{{ var }}
	再填坑
		渲染模板的时候传递上下文进来
		上下文是一个字典
		content={'key':'value'}
	模板的兼容性很强
		不传入不会报错
		多传入也会自动优化掉
	浏览器不认模板
		浏览器也叫做html解析器  只识别html文件
		在到达浏览器之前,已经进行了转换,将模板语言转换成了HTML
	for 支持
		{% for %}
	render底层实现:应用场景,发送邮件
		加载
			three_index = loader.get_template('three.html')
			content={'xxx':'xxxx'}
		渲染
			result = three_index.render(content=content)
			return HttpResponse(result)
6.DML
代码语言:javascript复制
数据操作
	迁移
		生成迁移
			python manage.py makemigrations
		执行迁移
			python manage.py migrate
			才会真正在数据库产生表
	ORM
		Object Relational Mapping 对象关系映射
		将业务逻辑和sql进行了一个解耦合
		通过models定义实现  数据库表的定义
	模型定义
		(1)继承models.Model
		(2)会自动添加主键列
		(3)必须指定字符串类型属性的长度
			class Student(models.Model):
                 name = modes.CharField(max_length=16)
                 age = models.IntegerField(default=1)
	存储数据
		创建对象进行save()
	数据查询
		模型.objects.all()
		模型.objects.get(pk=2)
	更新
		基于查询
		save()
	删除
		基于查询
		delete()
7.修改数据库
代码语言:javascript复制
修改数据库
	在settings中的DATABASES中进行修改
	实际上都是关系型数据库
	mysql
		'ENGINE': 'django.db.backends.mysql',
		NAME
			数据库名字
		USER
			用户名字
		PASSWORD
			密码
		HOST
			主机
		PORT
			端口号
				引号加不加“”都可以			
	mysql迁移---》有坑---驱动问题
	mysql驱动
		mysqlclient
			- python2,3都能直接使用
			- 致命缺点
			- 对mysql安装有要求,必须指定位置存在配置文件
		mysql-python
			- python2 支持很好
			- python3 不支持
		pymysql
			会伪装成mysqlclient和mysql-python
			- python2,python3都支持
			init中   import  pymysql      pymysql.install_as_mysqldb()
8.django shell
代码语言:javascript复制
python manage.py shell
	django 终端
		python manager.py shell
	集成了django环境的python 终端
	通常用来调试
	eg:
	from Two.models import Student
	students = Student.objects.all()
    for student in students:
             print(students.name)
9.数据级联-一对多
代码语言:javascript复制
模型关系:
     class Grade(models.Model):
      		g_name = models.CharField(max_length=32)
    class Student(models.Model):
          s_name =models.CharField(max_length=16)
          s_grade=models.ForeignKey(Grade) 
 多获取一
	就是一个书写的属性
	eg:根据学生找班级名字
        student = Student.objects.get(pk=2)
        grade = student.s_grade
        return HttpResponse(grade.g_name)
一获取多
	多的set
	eg:根据班级  找所有的学生
        grade = Grade.objects.get(pk=2)
        students = grade.student_set.all()
        content = {
                    'students':students
        }
        return render(request,'students_list.html',content)    
作业:

作业:1 建立一个班级表 建立一个学生表 执行一个请求 获取班级列表 点击班级列表 获取所有学生

0 人点赞