安装
pip3 install django创建Django项目
django-admin startproject 项目名创建应用
一,python manage.py startapp 应用名 (应用创建完成后添加到setting.py INSTALLED_APPS{} 中)
二,配置到settings.py应用目录
tests.py 测试views.py 视图
models.py 操作数据库orm
admin.py 后台管理系统
项目目录:全局
settings.py 配置信息
urls.py 路径分发
启动Django项目
python manage.py runserver IP地址和端口 (ip不填默认本机)注意:
页面from表单提交后 Django会拦截页面 Django会匹配键值对
<from action="{% url 'login' %}" method='post'>{% csrf_token %} 添加代码 前端代码会自动添加一个input 隐藏的标签
Django后台会先匹配隐藏的input内容
为了安全
django 静态文件
让Django找到 js文件和一些不会改变的文件html 默认存放目录为:templates文件夹下
js文件放到 static 包下
修改配置文件:
settings.py 添加STATIC_URL = '/static/' 相当于别名 (前端使用别名)
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
) 添加路径 如果深一层还可以再次添加文件文名
HTML文件引入
了解:<script src="/static/jquery-3.1.js"> <script>使用:在<head> {% load staticfiles %} </head>
<body> <sript src="{% static 'jquery-3.1.js' %}"> </script> </body>
url路由分发
测试:在项目目录urls.py添加url
在应用目录views.py 添加视图函数 先导入路径from import
在视图函数中 必须添加一个形参,这个形参就是客户端发送给服务器打包所有信息的对象
视图函数return一个HttpResponse对象
或者 return reder(形参,'HTML文件') 返回HTML页面
HTML文件在templates文件夹下
html 跳转页面:
<a href="{{ '/add/' }} "> 添加信息 </a><return reder(形参,'HTML文件',locals()) 或者{'前端变量':变量名}locals将变量传递到前端 HTML文件中{{ 变量名 }} 以字典的形式
^匹配开头 $匹配结尾
执行自己文件夹下的页面url 路径分发:
url(r'blog',include('blog.urls'))
url(r'^blog',views.login,name='login') name别名
视图函数views.py
接收参数 前端发送方式为post形参.POST.get("name") 方式来获得
req.method 请求方式
返回页面:
使用:return render(形参,'index.html',{'time':t})了解:return reder_to_response("index.html",{'time':t})
跳转页面:
导入redirect 跳转到新的页面 url会变return redirect('/login/') 走login页面 添加127.0.0.1:8000也可以
/login/相当于127.0.0.1:8000/login/ 先到urls.py分发找到这个页面
不会跳转到新的url 也会显示新的页面 但是页面刷新就会返回原页面
return render(形参,'login.html',locals())
直接拿到是模版
将参数渲染到页面
{'time':t,'name':name} 参数太多键值对会很多locals() 局部变量 全部渲染到页面 对应指代
requset内变量也都可以拿到 {{ requset.method }} GET方式
注意:
函数中创建的标签 在页面中{{}}调用按普通字符串处理 (加{{ a|safe }} 正常处理)
页面选择(句点符)深度范围的查找
函数中name = ['去','呢']return render(requset,'index.html',{'name':1})
前端可以使句点符来获取 {{ name.0 }}
函数 d = {'name':'了','age':'12'}
return render(requset,'index.html',d)
前端 {{ d.name }}
class实例对象 也可以来调用
过滤(对拿到的变量做过滤)
语法格式: {{ obj|filter:param }}
filter:过滤器
add : 给变量加上相应的值 {{ d.age|add:3}}addslashes : 给变量中的引号前加上斜线 {{ }}
capfirst : 首字母大写 {{ test|capfirst }}
cut : 从字符串中移除指定字符串 {{ text|cut:''}}移除空格
date : 格式化日期字符串 {{ t|date:"Y-m-d"}}
default : 如果是False,就替换成设置的默认值,否则就用本来的值 {{ text|default:"空"}}
default_if_none : 如果是None,就替换成设置的默认的值,否则就用本来的值 {{ text|default_if_none:""}}
safe : 函数标签 变量在页面中正常显示{{ a|safe }}
{% autoescape off %}
<h1> {{ a }}</h1>
{% endautoescape %}
value='1234'
{{ value|frist }} 第一个
{{ value|length }} 长度
{{ value|slice:"-1"}} 切片
value="http://www.baidu.com/?a=1&b=3"
{{ value|urlencode }} 编码
标签
格式{% %}{% url %} 引用路由配置的地址
判断 成对出现 可以嵌套
{% if d.age>10 %}<h1>hello {{ d.name }}</h1>
{% elif%}
{% else %}
{% endif %}
循环
{% for q in list %}
{{ forloop.counter }} : {{ q }} 计算次数
{% endfor %}
forloop.counter添加序号默认从0开始 counter0 从0开始
{{ forloop.recounter}} 倒序
{% for %}
{% if forloop.first } 判断是否是第一次循环
<li class='frist'></li>
{% else %}<li>
{% endif %}
{{ name }}
</li>
{% empty %}
<h1> 列表为空时显示</h1>
{% endfor %}
django渲染出一个隐藏的input标签
{% csrf_token %}用简单的变量名代替复杂的变量名
{% with total=qweqsdafaffaf %} {{ total }} {% endwith %}禁止render
{% verbatim %}{{ hello }} 只显示文本{{ hello }}
{% endverbatim %}
加载标签库
{% load %}自定义filter和simple_tag(重启生效)
1.必须在app创建templatetags包2.创建任意.py 文件 如:my_tags.py
3.在使用自定义simple_tag和filter的html文件中导入之前创建的 .py:{% load my_tags.py%}
4.使用slimple_tag和filter
5.在settings中的INSTALLED_APPS配置当前app,不然Django无法找到自定义的simple_tag和filter
2.创建py文件格式(固定不变)
form django import template
form django.utils.safestring import mark_safe
register = template.Library() // 变量名register固定不可改变的
@register.filter
def f(x,y)
return x*y
@register.simple_tage
def simple_tag_multi(x,y,z):
return x*y*z
3.html页面的第一行引入{% load my_tags.py %}
4.HTML使用
filter 使用:
{{ d.age|f:3 }}
注意:最多只能传入两个参数d.age,3
可以传入列表字典
simple_teg 使用:
{% simple_teg_multi 3 5 6 %}
注意:不能使用控制语句
模版使用:(一个为基础大部分相同 其他直接继承)
修改部分即可在跳转页面中想要添加地方添加{% blog 自定义名 %} 替换的内容 {% endblock %}
{% extends 'index.html'%} 继承的html ***必须放到第一行
添加修改的内容
{% block 自定义名 %} ***不允许出现相同的自定义名
// {{ block.super }} 获取父级内容
{{ endfor }}
{% endblock %}load 增加
{% load staticfiles %}
{% extends 'index.html'%}
{% block 自定义名 %} ***不允许出现相同的自定义名
{% include ' 继承的HTML' %} 增加的内容 页面
{% endblock %}cookies
用来存放验证用户登录有没有进行登录如果登录cookies就存着服务端发送给客户端的信息
服务端每次把key发送给客户端 服务端根据key判断用户信息
session 信息存放在服务端 服务端默认存放在服务端数据库
{'cookies':{'':'','':''}}
如果找不到request.session 修改setting.py文件
MIDDLEWARE 改为 MIDDLEWARE_CLASSES
第一次访问 服务器默认给客户端发送 COOKIES { 'session' : ' ', 'csrftoken' : ' '}
SESSION 等于 key
设置SESSION 服务器默认储存15天
获取: requset_session[key]
设置: requset.session[key] = values
删除: del requset.session[key]
设置 cookies 有效时间
ret = redirect('/index/')
ret.set_cookie('username',{'11':'22'},max_age=10) 10秒后不再生效
ret.set_cookie(expires=datetime.datetime.utcnow()+datetime.timedelta(days=3)) 三天后失效
设置 session 有效时间
requset.session.set_expiry(values)
如果values是整数 session 会在指定values秒后失效
如果values是datatime或 timedelta, session或早这个时间后消失
如果values是0 用户关闭浏览器就会失效
如果values是None, session会依赖全局session失效策略