提交
学员管理:
表: 班级
学生
老师
班级:
id title
1 1班
2 2班
学生:
id name 班级id(外键)
1 许 1
老师:
id name
1 林海锋
2 郭丽
老师班级表关系:
id 老师ID 班级id
1 1 1
2 1 2
3 2 2
单表操作:
- 增
- 删
- 改
- 查
一对多操作 () 学员管理 模态对话框 Ajax(页面不刷新的前提下,可以发数据给后台)
PS:views中对用户提交的数据进行判断(Form组件)
2.模态对话框
班级管理:
--添加 Form表单提交,页面会刷新
$.ajax(
{
url:'/modal_add_class/',
tpye:'POST',
data:{'title':'kkkkk'},
success: function(data){
//当服务端处理完成后,返回数据时,该函数自动调用
//data = 服务端返回的值
console.log(data);
}
}
)
3.Ajax(页面不刷新的前提下,可以发数据给后台)
jQuery
$.ajax({
url:'要提交的地址’,
type:‘POST’,//GET或者PoSt,提交方式
data:{‘k1’:‘v1,’k2':'v2'},
success:function(data){
//当前服务端处理完成后,自动执行的回调函数
//data返回的数据
}
})
其他:
1.模板语言if条件语句
2.Form表单提交,页面会刷新
3.Ajax提交页面不刷新
4.js实现页面跳转:
location.href=“要跳转的地址”
5.
模态对话框(Ajax)
- 少量输入框
- 数据少
新URL方式
- 对于大量的数据以及操作多
1.班级:Ajax(删除,编辑)
对话框 (单表,一对多)
2.多对多
3.Bootstrap
4.font awesome
--------------------------------------------------------------------------------------------------------
内容回顾
1.Web框架本质
浏览器(socket客户端)
b。发送ip和端口 http://www.baidu.com:80/index/
GET:
请求头
http1.1 /index/?p=23
请求体 (无内容)
POST:
请求头
http1.1 /index/?p=2
请求体 (内容)
c。接收相应:
普通相应:页面直接显示
重定向:再发起一次Http请求
服务器(socket服务端)
a.启动并监听ip和端口,等待用户连接
c. 接收请求进行处理,并发回
字符串
普通返回响应头:
Acces-Control-allow-Origin:*
Cache-Control:max-age=600
Date:Mon,
Exires:Mon,
Last-Modified:Wed
响应体:
................
重定向返回响应头:(浏览器自动去跳转)
LOCATION: ’http://www.baidu.com‘
Acces-Control-allow-Origin:*
Cache-Control:max-age=600
Date:Mon,
Exires:Mon,
Last-Modified:Wed
响应体:
2.DjangoWeb框架
a.创建Project
django-admin startproject mysite
b. 配置
模板
静态文件
csrf
c. 路由关系
url -> 函数
url -> 函数
d. 视图函数
def index(request):
request.method
request.GET或者POST
return HttpResponse()
return redirect('URL')
return render(request,'模板路径',{返回数据用于,模板渲染})
#1.获取模板+数据,渲染
#2.HttpResponse(..)
e.模板渲染
{{k1}}
{{k2.0}}
{% for i in result %}
{{i}}
{% endfor %}
{% if 1> 2%}
{% endif %}
f.
1)JS阻止默认事件的发生
2)location.reload() 刷新当前界面
3) HttpReponse(json.dumps(dfdf)) 把字典转换 字符串
4)JSON.parse()
PS: .jQuery 事件阻止默认事件发生
$('#addModel').click(function(){
alert(123);
return false;
})
3 Ajax(jQuery)
$.ajax({
url: '',
type: 'POST',
data: {k1:'v1'},
dataType:'JSON',
success.function(arg){
//arg 字符串
//JSON.parse(字符串) =》 对象
//JSON.stringify(对象) =》 字符串
python v={'k1':'v1'}
v['k1']
前端 v={'k1':'v1'}
v.k1
console.log(arg);
}
})
- 增
- 删
- 改
- 查
多对多操作:
- 增
- 删
- 改
- 查
Django基础
.addmodal{
position: fixed; /*相对于游览器窗口来说*/
left: 50%;
top: 50%;
width: 400px;
height: 300px;
background-color: white;
z-index: 1000;
margin-left: -200px;
margin-top: -200px;
}
1.Http请求生命周期
请求头 -》 提取URL -》路由关系匹配 -》 函数(模板+数据,渲染)-》返回给用户(响应头,相应体)
2.def index(rquest):
request.post.get
request.GET
request.method
return render()
return HttpReponse
模板渲染是在后台执行
3.for
if
索引
classs_id=[1,2,4]
$.ajax({
url: '/modal_add_teacher/',
type: 'POST',
data: {'name':name,'classs_id':classs_id,'k2':JSON.stringify({k1:v1})},
traditional:true, //如果 是列表的,ajax 发送的添加 ,不做任何处理,直接发送列表到后台
success:function (arg){
arg =JSON.parse(arg);
if (arg.status){
location.reload();
}else{
$('#addError').text(arg.message);
}
2.插件
--bootstarp(一)
--看图拷贝
官网 bootstarp 点击Bootstrap3中文文档 -- 》 全局css样式 或者组件(f12)查看元数据
图标插件 Font Awesome
3,目标完善学生管理系统
a,bootstrap 一个包含css和js的一个代码库。
-样式
-响应式 当网页宽度缩小到768像素时,变小 页面做相应的变化
关键词: @media
---导航条
---栅格
@media(min-width:768px){
.container > .navbar-header,
.container-fluid > .navbar-header,
.container-fluid > .navbar-collapse {
margin-right:0;
margin-left:0;
}
}
body{ 样式边框
margin: 0;
}
.pg-header{
height: 48px;
min-width: 1190px; ##主要当宽度变小会出现滚动条
background-color: #204d74;
}
body{
margin: 0;
}
.pg-header{
height: 48px;
min-width: 1190px;
background-color: #204d74;
}
.menus{
width: 200px;
position: absolute; ##提示绝对位置
left: 0; ##靠近左边为0
bottom: 0; 靠近下为0
top: 48px; 靠近上
background-color: #a6e1ec;
}
.content{
position: absolute;
left: 200px;
right: 0; 靠近右为0;
top: 48px;
bottom: 0;
min-width: 990px;
overflow: scroll; 当内容超出界面,会出现滚动条
}
2.完善学员管理系统
-- 后台管理布局
-- Django 母版:
母版: 存放所有页面公用
子版:
3.Cookie :
def set_cookie(self,key,value='',
max_age=None,
expires=None,
path='/',
domain=None,
secure=Falae, ##https
httponly=False 只能自http请求中传入,js代码无法获取
);
a.保存在用户浏览器端“键值对”。(淘宝,京东的)解决无状态的。
b.服务端可以向用户浏览器端写cookie
c.客户端每次请求时,会携带cookie去。(把本地相关cookie,在请求头里面)
print(rquest.COOKIES) 读取cookie
def li(request):
obj = HttpResponse('ok')
obj.set_cookie('k1','v1')
return obj
或者:
obj = redirect('/classes/')
obj.set_cookie('ticket','abdededeede',max_age=10,path='/') 设置cookie的有效时间,单位秒
return obj
cookie签名:
obj.set_signed_cookie('ticket',"123",salt='jjj')
内容整理:
1.Bootstrap响应式布局: @media()
2.栅格:
3.表格
4.导航条
5.路径导航
6.fontawesome
7.布局position: absolute
8.当鼠标移动到xx样式的标签上是,其子标签.g应用一下属性
.xx:hover .g{
}
9. Django母版
{%block %}
{%endblock%}
子版 {% extends “layout.html” %
}
10.用户登录
--cookie : 保存在浏览器端“键值对”,设置超时时间。
-发送http请求时,在请求头中携带当前所有可访问的cookie
--写cookie
def index(request):
obj = HttpResponse('')
obj.set_cookie()
取 request.COOKIES.get()
obj.set_signed_cookie()
取 request.get_signed_cookie()
project
-app01 自己创建的目录
--views.py
-SQLHelper 封装SQL操作
Django:
- 路由
- 视图函数
- 模板
- ORM (面向对象,操作数据库) 类 -- 表: 对象-行 pymsql连接数据库
非主流
1.创建APP
2.数据库操作
今日内容:
1.路由系统
2.视图函数 CBV(视图居于类) , FBV(视图居于函数)
3.ORM操作
今天内容:
D:
cd 资料
D:\资料 > django-admin startproject xie
D: \资料 > cd xie
D: \资料\xie > python manage.py startapp app02
project
-- app01
-admin Django自带后台管相关配置
-modal 写类,根据类创建数据库表
-test 单元测试
-views 业务处理
1.路由系统
url - > 函数
a. /login -> def login
b. /add-user/(\d+)/ -> def add-user(request,a1)
re_path('edit/(?P
def edit(request,a1,a2):
PS:
终止符: ^edit$
伪静态:
path('edit/(\w+).html$', views.edit),
2.路由分发
from django.urls import path,re_path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('app01/', include('app01.urls')),
path('app02/', include('app02.urls')),
]
from django.urls import path,re_path,include
from app01.views import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('index/', views.index),
re_path('edit/(\w+)/', views.edit),
]
http://127.0.0.1:8000/app01/index/
3.反生成url
A \ /add-user/(\d+)/ -> def add-user(request,a1) name=n1
在Python代码中
from django.urls import reverse
v=reverse('n1',kwargs={'a1:111})
print(v)
B \