1.母版:
layout.html
{% block x %}{% endblock %}
2.子版:
{% extends 'layout' %}
{% block x %}.......{% endblock %}
3.Cookie
在浏览器上保持的键值对,参数(超时时间,域名)
服务器写Cookie:
#obj=HttpReponse(...)
#obj=render(...)
obj=redirect(...) #不一定是redirect三个中的任意一个都行
obj.set_cookie(k1,v1,max_age) #max_age超时时间,过了这个时间就消失了
obj.set_signed_cookie(k1,v1,max_age,salt='fff') #加盐版
获取Cookie:
request.COOKIES.get('k1')
request.get_signed_cookie('k1'.salt='fff') #接收加盐版Cookie
Cookie作用登录和限制操作次数(投票)
4.BootStrap响应式布局@media
5.后台管理页面布局
左面菜单栏占200多,右边全占用
position:absolute;
overlow:scroll;
<div class='div1'>
<span class='span1'>abc</span>
</div>
.div1:hover .span1{
当鼠标移动到父标签div的时候他的孩子span发生想要的变化
}
position中三个属性:absolute,relative,fixed
之前:自己建立app01 自己创建目录-view.py 用SQLHelper封装SQL操作
这些工作django都已经内部做好了,今天就来发挥django10成的功力
6.三个框架
Django:
路由
视图
模板
ORM框架(本质上在内部,类-表,对象-行,连接数据库还是用pymysql)
Torando:
路由
视图
模板
pymysql,SQLAchemy(没有ORM框架可以随便用,就是有也可以随便用,但是既然有就用)
flask:
路由
视图
模版(第三方组件)
pymysql,SQLAchemy(也没有ORM框架,瞎胡用)
7.app01目录:
migrations -数据库相关使用的,讲modal的时候会说
admin -django在内部写的一个后台管理,用来配置后台管理进去之后能做什么操作,可以代替nevicate了
apps -当前app01的相关的配置文件可以下在这里
models -django的ORM类就写在这个文件里面,类->表
test -快速的做一个单元测试
8.路由系统
url -> 函数
a. /login/ -> def login
b. /add-user/(d+) -> def login 在url上还可以写正则表达式
c. get传值:权重低,搜索结果在后面,百度爬虫会认为?后面的东西会经常变
d. .html伪静态,静态文件访问速度快,增加权重,哄用户,骗百度
e. url(r'^edit$', views.edit) 推荐用这个
f. 伪静态:
类似静态网站,一访问就直接把模板返回,动态网站需要从数据库拿
点东西然后进行模板渲染在返回给浏览器,后者比较慢
例:url(r'^edit/(w+).html$',views.edit)
g. 路由分发:
宗旨:让每一个app里面都有一个自己的url路由系统 include
引入include通过他把引路 url(r'^app01/',include('app01.urls'))
h. 起别名: url(r'^index/(?P<a1>d+)/', views.index,name='n1')
根据名字反推出url:
1.在Python中先导入reverse
2.反生成url
url分为三种:
1.一对一
2.正则表达式类的url,加几节url就要在函数中对应有几个参数接收
3.include -- url分发
9.别名的运用:
别名和ORM是Django框架特有的
***注意:
如果是url一对一的话:在函数中也就是后台通过reverse反转的url,就是函数对应的url,这个没毛用
url正则情况:在函数中通过reverse反转的url,开始断不变其他随意变的东东
如果是前端替换的话:可以利用urls文件中写的任意别名
--------------------------------------------------------------------- 数据库里面存放着每个用可以看到的url表,比如: 方柯基:/index/a/b/c/d/e/ /login/a/b/c/d/e/ /duantui/a/b/c/d/e/ 当用户方柯基一登录的时候,我们就要从数据库拿到这些数据,再通过模板 渲染后发送给服务器,在模板中我们要循环这些url插入到a标签中 <ul> for url in url_list: <li><a href='{{url}}'>ff</a><li> </ul> 但是这样的话url很长,而且一眼看不出干啥的,于是就有了别名 我们在数据库就存这个 方柯基:n1 n2 n3 这样我们在数据库放的东西也少了,而且别名由我们自己取,我们 可以自己起一个适合的名字。渲染的时候变一下就可以了 <ul> for name in name_list: <li><a href='{% url name %}'>ff</a><li> </ul> ---------------------------------------------------------------------
10.视图函数:
CBV:围绕类来写,就是面向对象
FBV:围绕函数来写,之前就是一直这么搞
11.ORM操作
在HTTP请求中: url->视图(模板+数据) ORM功能: 1.操作表 创建表 修改表sqlAlchemy不能修改表 删除表 2.操作数据行 增删改查 ORM利用pymysql等第三方工具去连接数据库 默认:连接数据库用的是MySQLDB,需要修改为pymysql Django连数据库连得是SQLlite是文件型数据库 需要修改的地方: 1.将MySQLdb修改为pymysql 2.把SQLlite改为mysql 步骤: CMD: django-admin startproject mysite6 cd mysite6 python manage.py startapp app01 python manage.py startapp app02 python manage.py startapp app03 一个project里面可以有多个app(一个app可以作为一个业务线) 1.创建数据库 2.DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'db6', 'USER': 'root', 'PASSWORD': '', 'HOST': 'localhost', 'PORT': 3306, } } 3.import pymysql pymysql.install_as_MySQLdb() 4.在models中创建: class UserInfo(models.Model): nid=models.BigAutoField(primary_key=True) username=models.CharField(max_length=32) password=models.CharField(max_length=64) 5.注册app01 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01' ] 6.创建数据表 Python manage.py makemigrations python manage.py migrate 7.class UserGroup(models.Model): ''' 部门 ''' title=models.CharField(max_length=32) class UserInfo(models.Model): ''' 员工 ''' nid=models.BigAutoField(primary_key=True) #AutoField 自动字段,这里是自增字段相当于自增int类型 user=models.CharField(max_length=32) password=models.CharField(max_length=64) # age=models.IntegerField(null=True) age=models.IntegerField(default=1) ug=models.ForeignKey("UserGroup",null=True)