PythonWeb_Django_02_bj

1、URL的使用
1、urls.py
默认是在主目录中的,主路由配置文件,包含所有的地址映射

	每一个请求到达之后,都会由urls.py中的urlpatterns列表中
    的url()进行匹配。当url()匹配上之后,可能就会将请求转交
    给其他的视图(Views)或其他的urls.py去处理
2、测试
	1、在主目录中,创建 views.py
		作用:包含所有定义好的视图(处理程序)
3、url函数详解
	1、url函数的语法
		url(regex,views,kwargs=None,name=None)
		1、regex
			正则表达式模式,匹配请求的url,字符串类型
		2、views
			当前url对应的处理的视图函数,此处写函数名即可
		3、kwargs
			字典,用来向views传参的,如果没有参数可以省略
		4、name
			字符串,给url()起别名,方便在模板中使用
	2、通过 url 向 views 传参
		1、使用正则表达式子组传参
			使用子组传参 - (),一个子组是一个参数,如果想传递
            多个参数的话,则使用多个子组,多个参数之间使用 / 
            分割
			urlpatterns = [
				# 访问路径是 run/ ,交给 run_views
				url(r'^run/$',run_views),
				# 访问路径是 run/两位数字,交给run_arg1_views
				url(r'^run/(\d{2})/$',run_arg1_views),
				# 访问路径是 run/两位数字/四位数字,交给run_arg2_views
				url(r'^run/(\d{2})/(\d{4})',run_arg2_views),
			]

			注意:
				1、在 url() 中,一个子组表示一个参数
				2、在 views.py 中,对应的处理函数要根据url()中
                   子组的个数,相应的定义参数(形参)。定义的参数
                   要位于request之后
				url(r'^run/(\d{2})/(\d{4})',run_arg2_views)

				def run_arg2_views(request,num1,num2):
					pass
		2、使用url()第三个参数,字典传参
			urlpatterns = [
				url(
					r'^show/$',
					show_views,
					{'name':'zsf','age':'25'}
				)
			]

			def show_views(request,name,age):
				pass

urls.py

from django.conf.urls import url
from django.contrib import admin
from .views import *

urlpatterns = [
url(r’^admin/’, admin.site.urls),
# 自定义url函数:定义一个访问路径,映射到对应的视图中

# 访问路径 http://localhost:8000/first/,
# 则由first_views视图处理
url(r'^first/$', first_views),

# 访问路径 http://localhost:8000/run/两位数字/
# 交给 run_arg1_views 处理
url(r'^run/(\d{2})/$', run_arg1_views),

# 访问路径 http://localhost:8000/run/四位数字/两位数字
# 交给 run_arg2_views 处理
url(r'^run/(\d{4})/(\d{2})/$', run_arg2_views),

# 访问路径 http://localhost:8000/show/
# 交给 show_views 处理
url(r'^show/$', show_views, {'name': 'zsf', 'age': '25'})

]

views.py

from django.http import HttpResponse

def first_views(request):
return HttpResponse(‘我的第一个django程序’)

def run_arg1_views(request, num1):
return HttpResponse(“参数为:” + num1)

num1 对应的是地址中的 四位数字

num2 对应的是地址中的 两位数字

def run_arg2_views(request, num1, num2):
return HttpResponse(“参数1:” + num1 + “,参数2:” + num2)

def show_views(request, name, age):
return HttpResponse(“姓名:

” + name + “

,年龄:

” + age + “

”)

2、Django中的应用
1、什么是应用
应用就是网站中的一块独立的程序
在Django中,主目录一般不处理用户的具体请求,主要做的是项目的
初始化以及请求的分发
2、创建应用
1、通过 指令 创建应用
./manage.py startapp 应用名称
ex:
./manage.py startapp news

         tarena@tedu:~$ cd Django
        tarena@tedu:~/Django$ django-admin startproject day02
        tarena@tedu:~/Django$ cd day02
        tarena@tedu:~/Django/day02$ ./manage.py startapp news
        tarena@tedu:~/Django/day02$ ./manage.py startapp index
        tarena@tedu:~/Django/day02$ ./manage.py startapp sport
        tarena@tedu:~/Django/day02$ ./manage.py startapp music
        tarena@tedu:~/Django/day02$ tree
        .
        ├── day2
        │   ├── __init__.py
        │   ├── __init__.pyc
        │   ├── settings.py
        │   ├── settings.pyc
        │   ├── urls.py
        │   └── wsgi.py
        ├── index
        │   ├── admin.py
        │   ├── __init__.py
        │   ├── migrations
        │   │   └── __init__.py
        │   ├── models.py
        │   ├── tests.py
        │   └── views.py
        ├── manage.py
        ├── music
        │   ├── admin.py
        │   ├── __init__.py
        │   ├── migrations
        │   │   └── __init__.py
        │   ├── models.py
        │   ├── tests.py
        │   └── views.py
        ├── news
        │   ├── admin.py
        │   ├── __init__.py
        │   ├── migrations
        │   │   └── __init__.py
        │   ├── models.py
        │   ├── tests.py
        │   └── views.py
        └── sport
            ├── admin.py
            ├── __init__.py
            ├── migrations
            │   └── __init__.py
            ├── models.py
            ├── tests.py
            └── views.py                             
    
    2、在 settings.py 中注册应用
		在 INSTALLED_APPS 中追加应用名称
        INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'news',
            'index',
            'music',
            'sport',
        ]

	3、应用的结构组成
		1、migrations 目录
			存放数据库中间文件的目录(日志文件)
		2、__init__.py
			应用的初始化文件
		3、admin.py
			应用的后台管理配置文件
		4、apps.py
			应用的属性配置文件
		5、models.py
			模型配置文件
		6、tests.py
			测试模块
		7、views.py
			视图处理文件
		
	练习:
		1、创建 index 应用,并注册
		2、创建 sport 应用,并注册
		3、创建 music 应用,并注册

	4、应用中的 urls
		练习
			1、访问 http://localhost:8000/news/index
				交给news应用中的urls处理(找 index_views视图)
			2、访问 http://localhost:8000/music/index
				交给music应用中的urls处理(找index_views视图)
			3、访问 http://localhost:8000/sport/index
				交给sport应用中的urls处理(找index_views视图)
			4、访问 http://localhost:8000
				交给index应用中的urls处理(找index_views视图)
			5、访问 http://localhost:8000/login
				交给index应用中的urls处理(找login_views视图)
			6、访问 http://localhost:8000/register
				交给index应用中的urls处理(找regsiter_views视图)
			7、访问 http://localhost:8000/news/
				交给news应用中的urls处理(找 index_views视图)
			8、访问 http://localhost:8000/music/
				交给music应用中的urls处理(找 index_views视图)
			9、访问 http://localhost:8000/sport/
				交给sport应用中的urls处理(找 index_views视图)

3、Django中的模板(Tempates)
1、什么是模板
模板是要动态给用户呈现的网页
模板就是一个网页 - 前后端结合的网页
模板是通过视图(Views)呈现给用户的
2、模板的设置
settings.py 中 TEMPLATES 变量 进行模板的设置

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]


	1、BACKEND:指定模板的搜索引擎,不用改动
	2、DIRS:指定模板所存放的目录们
		DIRS : ['index.temp','news.temp',...]
		但是,如果DIRS中内容为空的话,那么Django会自动的到每个
        应用下去搜索一个叫 templates 的目录作为模板的存放目录。
		推荐:
			1、DIRS内容为空
			2、在每个应用中,创建一个 templates 目录
	3、APP_DIRS
		True:首先从DIRS中指定的目录中去查找模板,没找到的话再搜索templates目录
3、模板的加载方式
	模板的加载需要在“视图”中完成
	1、使用 loader 获取模板,通过 HttpResponse 进行响应
		from django.template import loader
		from django.http import HttpResponse

		def index_views(request):
			#1、通过 loader 加载模板(得到一个模板对象)
			t = loader.get_template("模板名称")
			#2、通过模板对象t,将模板渲染成字符串
			html = t.render()
			#3、通过 HttpResponse 将html响应给客户端
			return HttpResponse(html)

	2、使用 render 直接加载并返回模板
		from django.shortcuts import render

		def xxx_views(request):
			return render(request,'模板名称')
4、模板的语法
	1、变量
		1、作用
			允许将后端的数据传递给模板,在模板中,会根据变量的值进行显示
		2、Django中允许传递给模板做变量的数据类型
			数字,字符串,列表,元组,字典,函数,对象
		3、变量的语法
			通过一个字典,将要传递给模板的变量封装起来
			dic = {
				'变量1':'值1',
				'变量2':'值2',
			}
			1、使用 loader 
				t = loader.get_template('模板名称')
				html = t.render(dic)
				return HttpResponse(html)
			2、使用 render
				return render(request,'模板名称',dic)
		4、在模板中使用变量
			使用 {{变量名}}

			如果变量不存在或值为空的话,此位置不显示任何内容

            练习:
                在模板中显示以下内容:
                书名:《水浒传》
                作者:施耐庵
                主题:105个男人和3个女人的故事

http://localhost:8000/run/15/
http://localhost:8000/run/ab/

http://localhost:8000/news/xxx/xxx : 交给news应用处理
http://localhost:8000/music/xxx : 交给music应用处理
http://localhost:8000/index/xxx : 交给index应用处理
… …

http://localhost:8000/news/index
交给news应用中的index_views视图处理

http://localhost:8000/news/xxx/xxx… 将请求转交给 news 应用中的 urls去处理

http://localhost:8000/news/show
将请求转交给 news 应用中的 urls 的 show 路径去处理

day2/day2/urls.py

from django.conf.urls import url, include
from django.contrib import admin

主路由配置文件

urlpatterns = [
# 请求路径 http://localhost:8000/
# 一律都交给index应用中的urls模块去处理
url(r’^’, include(‘index.urls’)),
url(r’^admin/’, admin.site.urls),
# 请求路径 http://localhost:8000/news/
# 一律都交给news应用中的urls模块去处理
url(r’^news/’, include(‘news.urls’)),
# 请求路径 http://localhost:8000/music/
# 一律都交给music应用中的urls模块去处理
url(r’^music/’, include(‘music.urls’)),
# 请求路径 http://localhost:8000/sport/
# 一律都交给sport应用中的urls模块去处理
url(r’^sport/’, include(‘sport.urls’)),

]

day2/index/templates/01_template.html

Document

这是我的第一个模板

----------------------------------------------------- # day2/index/templates/02_var.html {​{title}}

这是一个模板

标题为:{{title}}

---------------------------------------------------- # day2/index/templates/03_exer.html {​{title}}

书名:<<{{title}}>>

作者:{{author}}

主题:{{topic}}

-------------------------------------------------- # day2/index/urls.py from django.conf.urls import url from .views import *

当访问路径 http://localhost:8000/

请求会转交到此处

urlpatterns = [
url(r’^ ′ , i n d e x v i e w s ) , u r l ( r ′ l o g i n / &#x27;, index_views), url(r&#x27;^login/ ,indexviews),url(rlogin/’, login_views),
]

urlpatterns += [
url(r’^01_getTemp/ ′ , g e t T e m p v i e w s ) , u r l ( r ′ 0 2 g e t T e m p / &#x27;, getTemp_views), url(r&#x27;^02_getTemp/ ,getTempviews),url(r02getTemp/’, render_views),
url(r’^03_var/ ′ , v a r v i e w s ) , u r l ( r ′ 0 4 v a r E x e r / &#x27;, var_views), url(r&#x27;^04_varExer/ ,varviews),url(r04varExer/’,varExer_views),
]


day2/index/views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader

Create your views here.

def index_views(request):
return HttpResponse(‘index应用中的index视图’)

def login_views(requset):
return HttpResponse(‘index应用中的login视图’)

def getTemp_views(request):
# 1.通过 loader 加载模板
t = loader.get_template(‘01_template.html’)
# 2.将模板对象渲染成字符串
html = t.render()
# 3.将字符串响应给客户端
return HttpResponse(html)

def render_views(request):
return render(request, ‘01_template.html’)

def var_views(request):
dic = {
‘title’: ‘测试模板’,
‘content’: ‘模板的内容’,
}
return render(request, ‘02_var.html’, dic)

def varExer_views(request):
title = ‘水浒传’
author = ‘施耐庵’
topic = ‘105个男人和3个女人的故事’

# dic = {
#     'title':title,
#     'author':author,
#     'topic':topic,
# }
# locals() 将当前函数内的局部变量封装成一个字典,效果同上
return render(request, '03_exer.html', locals())

day2/music/urls.py

from django.conf.urls import url
from .views import *

请求路径是 http://localhost:8000/music/的时候

请求才会到此

urlpatterns = [
url(r’^index/$’, index_views),
]


day2/music/views.py

from django.shortcuts import render
from django.http import HttpResponse

Create your views here.

def index_views(request):
return HttpResponse(‘music应用中的index’)

day2/news/urls.py

from django.conf.urls import url
from .views import *

只有请求路径是 http://localhost:8000/news/

才能进入到此路由配置

urlpatterns = [
# 请求路径是 show 的时候,则交给show_views去处理
url(r’^show/KaTeX parse error: Expected 'EOF', got '#' at position 21: …ow_views), #̲ 请求路径是 index 的时…’, index_views),
]

day2/news/views.py

from django.shortcuts import render
from django.http import HttpResponse

Create your views here.

def show_views(request):
return HttpResponse(‘这是news应用中的show_views视图’)

def index_views(request):
return HttpResponse(‘这是news应用中的index’)

day2/sport/urls.py

from django.conf.urls import url
from .views import *

请求地址 http://localhost:8000/sprot/

请求会转发到此处

urlpatterns = [
url(r’^index/$’, index_views),
]


day2/sport/views.py

from django.shortcuts import render
from django.http import HttpResponse

Create your views here.

def index_views(request):
return HttpResponse(‘sport应用中的index’)

login.css

body,p,h1,h2,h3,h4,h5,h6,ul,ol{
margin:0;
}

#container{
width:990px;
margin:0 auto;
}

#container h2{
color:#999;
border-bottom:1px solid #ccc;
font-weight:400;
padding-bottom:15px;
margin-bottom:30px;
}
#login{
float:right;
margin-top:80px;
margin-right:50px;
}

#login .form-line{
overflow:hidden;
margin-bottom:20px;
}

#login .form-line>div{
float:right;
width:300px;
}
#login .form-line>p{
float:right;
margin-right:30px;
height:40px;
line-height:40px;
color:#999;
}

#login .form-control{
width:300px;
height:40px;
border:1px solid #ccc;
/*
300 298 2 0
元素width=内容宽度+左右border+左右padding
40 36 2 2
元素height=内容高度+上下border+上下padding
*/
box-sizing:border-box;
outline:none;
padding-left:15px;
}

#login p.anchor{
float:right;
}

#login p.saved{
float:left;
}
#login p.anchor a{
color:#999;
}
#login p.saved input{
width:16px;
height:16px;
/*
垂直对齐:控制当前元素两端文本相对于当前元素的垂直对齐方式
top:顶部对齐
middle:居中对齐
bottom:底部对齐
baseline:基线对齐
*/
vertical-align:middle;
}

#login div.form-line a.goReg{
float:right;
}
#login div.form-line a.goReg,#login div.form-line .btnLogin{
/宽度,高度,边框,边框倒角,文本水平居中对齐,行高,文字大小/
width:146px;
height:40px;
border:1px solid #7A8F66;
border-radius:5px;
text-align:center;
line-height:40px;
font-size:18px;
}

#img{
position:relative;
width:500px;
}
#img>a{
position:absolute;
/宽度,高度,边框,倒角,位置,文字:大小,颜色,居中,行高,取消下划线/
box-sizing:border-box;
width:156px;
height:50px;
border:1px solid #7A8B61;
border-radius:5px;
bottom:25px;
left:172px;
font-size:18px;
color:#7A8B61;
text-align:center;
line-height:50px;
text-decoration:none;
}

login.html

<!doctype html>

天天果园-登录

会员登录

手机号

密码

忘记密码 快捷登录

记住密码

会员注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值