您的位置:首页 > 编程语言 > Go语言

Django配置 url路由 视图 标签, cookies

2018-06-09 11:13 761 查看

安装

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 }}  获取父级内容

{{ for }}

{{ 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失效策略


验证添加session

一个月免登录setting.py 添加




阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: