Django(静态文件or路由)
静态文件
在开发中同创会使用到 css,js,img等静态文件,这里带大家简单的介绍一下django如何处理静态页面,
配置 setting.py文件
STATIC_URL = '/static/' #这里相当于别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'myapp/static'), #静态文件的真是路径
]
说明:
配置url地址,当我们要访问静态文件时url地址,这里只是做其中一部分path,结合urlconf会详细说明;
- STATIC_ROOT:
配置静态文件存放目录,如上代码所示即在工程的static目录下存放这些文件; - STATICFILES_DIRS:
可能我们工程下会有多个app,或者还会牵涉到其它的静态资源文件目录,STATICFILES_DIRS就是列出一些文件目录,如,在app core下static目录,此目录下存放的就是只与该app相关的资源文件;
html文件引入配置
<!DOCTYPE html>
<html lang="en">
<link rel="stylesheet" href="/static/myapp.css" type="text/css">
<head>
<meta charset="UTF-8">
<title>欢迎页面</title>
</head>
<body>
<h1 class="h1" id="h1">欢迎来到我的页面
{{time}}</h1> </body>
css页面
h1{
background-color: green;
}
最终页面效果
加载JS也是一样
html在 head后添加
<script type="text/javascript" src="/static/myapp.js"></script>
创建myapp.js
/**
* Created by USER on 2018/9/12.
*/
$(document).ready(function () {
$("h1").click(function () {
$(this).css("background-color","red");
})
})
最终显示效果
哈哈不足之处请批评指正哈
下面开始进行urls 路由配置
路由配置
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。
先贴出咱们url.py 的配置
from django.contrib import admin
from django.urls import path
from myapp import views
from django.conf.urls.static import static
from django.conf import settings
from django.conf.urls import url #导入模块
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/',views.hello),
url(r'^hello/([0-9]{4})/$', views.year_archive),
url(r'^hello/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^hello/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]+ static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
注意:
- 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
- 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是
^articles
而不是^/articles
。 - 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义
下面咱们可以请求一些试列
在请求试列之前,先要创建好相对应的返回页面
编辑views.py
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
# request 是固定写法
def hello(request):
import datetime
now = datetime.datetime.now()
time =now.strftime("%Y-%m-%d %X")
return render(request,'hello.html',{"time":time}) def year_archive(request,year):
return HttpResponse(year+"year_archive")
def month_archive(request,year,month):
return HttpResponse(year+month+"month_archive")
def article_detail(request,year,month,num):
return HttpResponse(year+month+num+'article_detail')
访问 http://127.0.0.1:8000/hello/
访问 http://127.0.0.1:8000/hello/2018/
访问 http://127.0.0.1:8000/hello/2018/09/
访问 访问 http://127.0.0.1:8000/hello/2018/09/12/
根据不同的URL 来转发不同的网页
匹配规则是从上向下匹配,匹配到上面就回直接返回页面,所以要注意书写顺序。
有名分组
上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图。在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。
在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern)
,其中name
是组的名称,pattern
是要匹配的模式。
下面是以上URLconf 使用命名组的重写:
from django.conf.urls import url from . import views urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
这个实现与前面的示例完全相同,只有一个细微的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。例如:
'''
/articles/2005/03/ 请求将调用views.month_archive(request, year='2005', month='03')函数,而不是views.month_archive(request, '2005', '03')。
/articles/2003/03/03/ 请求将调用函数views.article_detail(request, year='2003', month='03', day='03')。 '''
在实际应用中,这意味你的URLconf 会更加明晰且不容易产生参数顺序问题的错误 —— 你可以在你的视图函数定义中重新安排参数的顺序。当然,这些好处是以简洁为代价;
简单的登录验证
首先写一下login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="{% url 'Log' %}"method="post">
用户名<input type="text" name="user">
密码 <input type="password" name="password">
<input type="submit">
</form>
</body>
</html>
在写一下逻辑views.py
def login(request):
if request.method=="GET": #如果浏览器发起的是GET请求则返回登录页面
return render(request,'login.html')
else:#当用户点击submit 按钮,发送的自然是POST的请求
print(request.POST)
user=request.POST.get('user')#在这里将获取的POST值存储到变量,进行判断
pwd=request.POST.get('password')
if user=='liu' and pwd =='123':#返回给用户相对应的结果
return HttpResponse('登录成功')
else:
return HttpResponse('登录失败')
最终效果
下面咱们来说一下反向解析。
反向解析
随着功能的增加会出现更多的视图,可能之前配置的正则表达式不够准确,于是就要修改正则表达式,但是正则表达式一旦修改了,之前所有对应的超链接都要修改,真是一件麻烦的事情,而且可能还会漏掉一些超链接忘记修改,有办法让链接根据正则表达式动态生成吗? 就是用反向解析的办法。
使用方法
- 定义url时,需要为include定义namespace属性,为url定义name属性
- 使用时,在模板中使用url标签,在视图中使用reverse函数,根据正则表达式动态生成地址,减轻后期维护成本。
html中的反向解析
1.1 原理:给url起名字,根据url的名字找到对应的视图
{% url 'register' %}
# 如果url匹配时携带参数:
url(r'^index/(\d+)/$', views.index, name='index'),
# 那么,在匹配到视图时就需要传入一个参数:
def index(request,param):
return render(request, 'index.html', {'param':param})
# 在页面中的url反向解析,也要传入对应参数
<a href="{% url 'index' 10 %}">跳转</a> 1.2 {% url 'users:register' %}与{% url 'register' %}的区别?
# 当项目中有多个应用的时候,给url起的名字就会相同,
# 所以为了区分,才有的{% url 'users:register' %};
# 在使用{% url 'register' %}时不要在项目urlconf中添加namespace;
.视图中的反向解析
1.1 导入模块
from django.core.urlresolvers import reverse
def index(request):
redirect_url = reverse('index', args=(1,))
return HttpReponse('ok') 3.视图中的重定向跳转:
from django.shortcuts import redirect
from django.core.urlresolvers import reverse
...
return redirect(reverse('users:register'))
接黄大佬的图一用
Django(静态文件or路由)的更多相关文章
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...
- django静态文件
django静态文件(js脚本.CSS.图片等) 默认统一放在每一个app的static文件夹下, 通过收集静态文件命令,自动将每一个app下static文件夹下的文件复制到根目录的static文件夹 ...
- 55 Django静态文件配置
一.Django静态文件配置 1.项目文件夹,新建一个文件夹statics 文件夹 2.在配置文件settings.py中,配置: 文件中有第句: STATIC_URL = '/static/'#静态 ...
- django 静态文件
django 1.8版本以上 django 静态文件配置. 小作之前, 一直觉得django的静态文件配置非常的麻烦. 1. 要设置url(r'^static/(?P<path>.*)&a ...
- Django 静态文件配置 (Nginx)
初学Django,在访问静态文件时候遇到很多误区,一直配置不成功,在此记录一下. Django静态文件访问分为两种:一种是Debug模式下,测试开发网站时对静态文件的访问,一种是实际生产环境中对静态文 ...
- NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
NET Core 1.1 静态文件.路由.自定义中间件.身份验证简介 概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要 ...
- django静态文件处理
django静态文件处理 从开始接接触python这门语言已有四年了,中间陆续的学习,又不断的忘记,所以基本上是没有系统的知识体系.但是挺喜欢这门简洁,强大的动态语言.最近自己私人有个项目要做,虽 ...
- Django静态文件配置-request方法-ORM简介-字段的增删改查
app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...
随机推荐
- —用python写图片格式批量处理工具
python爬取微博评论(无重复数据) 前言 一.整体思路 二.获取微博地址 1.获取ajax地址 2.解析页面中的微博地址 3.获取指定用户微博地址 三.获取主评论 四.获取子评论 1.解析子评论 ...
- 当音乐学博士搞起编程,用一本书改变了Java世界!
前言 说到Spring,也许现在的开发者们最先想到的是 Josh Long 超快的语速与现场代码能力,让很多Java开发者折服. 然后Spring的历史上,最传奇的还是要数其创始人:Rod Johns ...
- 剑指Offer-连续子数组中的最大和
题目 输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为 O(n). 输入 [1,-2,3,10,-4,7,2,-5] 返回值 ...
- Redis 设计与实现 10:五大数据类型之有序集合
有序集合 sorted set (下面我们叫zset 吧) 有两种编码方式:压缩列表 ziplist 和跳表 skiplist. 编码一:ziplist zset 在 ziplist 中,成员(mem ...
- 【MySQL】ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing
今天上午遇到了一个问题,新创建的mysql5.7的数据库,由于初始化有点问题,没有给root密码,用了免密码登录. 但是,修改了root密码之后,把配置中的免密登录的配置注释掉后,重启服务.服务正常启 ...
- 【RAC】10grac添加节点,详细步骤
RAC物理结构 现在的RAC环境是二个节点: dbp,dbs, 这个实验就是添加节点dbi. dbp,dbs和dbi节点的信息规划如下: 服务器主机名 dbp dbs dbi 公共IP地址(eth0) ...
- BAPI_SALESORDER_CREATEFROMDAT2 条件 定价元素
用函数 BAPI_SALESORDER_CREATEFROMDAT2创建SO的时候,遇见个问题,就是如图: 会多出来一个类型,搞了半天,发现是一个函数里的一个参数,我没有设置: LOGIC_SWITC ...
- Cookie&Session&Jsp总结
知识点梳理 Cookie&Session&Jsp 1 会话技术 1.1 会话管理概述 1.1.1 会话技术介绍 会话:浏览器和服务器之间的多次请求和响应 (一次对话) 为了实现一些功能 ...
- MySQL简介及安装 mysql Ver 14.14 Distrib 5.7.28
1.MySQL简介 1.数据库产品演变 第一代数据库架构: RDBMS 关系型数据库时代 : 合的时代 代表产品 :Oracle .MSSQL .MySQL.SQL server 第二代数据库架构:拆 ...
- 阿里云VOD(一)
一.阿里云视频点播 1.功能介绍 视频点播(ApsaraVideo VoD,简称VoD)是集视频采集.编辑.上传.媒体资源管理.自动化转码处理(窄带高清TM).视频审核分析.分发加速于一体的一站式音视 ...