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

xiaoxiao2021-02-28  40

安装

pip3 install django

创建Django项目

django-admin startproject 项目名

创建应用

一,python manage.py startapp 应用名        (应用创建完成后添加到setting.py   INSTALLED_APPS{} 中)

二,配置到settings.py  

应用目录

tests.py 测试views.py 视图models.py 操作数据库ormadmin.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和filter2.创建py文件格式(固定不变)form django import templateform django.utils.safestring import mark_saferegister = template.Library()   // 变量名register固定不可改变的@register.filterdef f(x,y)return x*y@register.simple_tagedef simple_tag_multi(x,y,z): return x*y*z3.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 添加

转载请注明原文地址: https://www.6miu.com/read-2628978.html

最新回复(0)