四、Django 视图与网址

Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示。

一,新建一个mysite的项目

在dos命令中执行以下命令:

	django-admin startproject mysite

运行后,如果成功的话, 我们会看到如下的目录样式:

	mysite
	├── manage.py
	└── mysite
	    ├── __init__.py
	    ├── settings.py
	    ├── urls.py
	    └── wsgi.py

我们会发现执行命令后,新建了一个 mysite 目录,其中还有一个 mysite 目录,这个子目录 mysite 中是一些项目的设置 settings.py 文件,总的urls配置文件 urls.py 以及部署服务器时用到的 wsgi.py 文件, init.py 是python包的目录结构必须的,与调用有关。

二、新建一个 learn APP应用

在dos命令中执行以下命令:

	先进入mysite目录下
	cd  C:\Users\anrui\Desktop\anrui\mysite 
	后执行下面命令:
	python manage.py startapp learn # learn 是一个app的名称

我们可以看到mysite中多个一个 learn 文件夹,其中有以下文件。

	learn/
	├── __init__.py
	├── admin.py
	├── models.py
	├── tests.py
	└── views.py

三、将新定义的app加到settings.py中

修改 mysite/mysite/settings.py

	INSTALLED_APPS = (
	    'django.contrib.admin',
	    'django.contrib.auth',
	    'django.contrib.contenttypes',
	    'django.contrib.sessions',
	    'django.contrib.messages',
	    'django.contrib.staticfiles',
	    'learn',
	)

备注,这一步是干什么呢? 新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件) .

四、定义视图函数

修改 mysite/learn/views.py

	from django.http import HttpResponse	 #引入HttpResponse模块
			
	def index(request):#定义一个index函数
		 return HttpResponse(u"你好")#函数返回一个 HttpResponse 对象

注:
1.HttpResponse:它是用来向网页返回内容的,就像Python中的 print 一样,只不过 HttpResponse 是把内容显示到网页上。
2.index()函数:第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容,用户浏览器,系统等信息在里面
3.return对象:函数返回了一个 HttpResponse 对象,可以经过一些处理,最终显示几个字到网页上。

五、定义视图函数相关的URL(网址)

修改 mysite/mysite/urls.py

	from django.contrib import admin
	from django.urls import path
	from learn import views as learn_views  # new导入应用中的相关模块并命名为learn_views
	  
	urlpatterns = [
	    path('admin/', admin.site.urls),
	    path('index/', learn_views.index),  # new添加index的地址引导
	]

六、在网页上做加减法

6.1.采用 /add/?a=4&b=5 这样GET方法进行
6.1.1修改 mysites/learn/views.py文件:(新定义一个add函数)

	def add(request):
	    a = request.GET['a']
	    b = request.GET['b']
	    c = int(a)+int(b)
	    return HttpResponse(str(c))

注:request.GET 类似于一个字典,更好的办法是用 request.GET.get(‘a’, 0) 当没有传递 a 的时候默认 a 为 0
6.1.2修改 mysites//urls.py 文件:(添加一个网址)

	    path('add/', learn_views.add, name='add'),  # new

注:
name=‘add’ name 可以用于在 templates, models, views ……中得到对应的网址,相当于“给网址取了个名字”,只要这个名字不变,网址变了也能通过名字获取到。
简单的理解就是:

	url(r'new_add/<int:a>/<int:b>/'', learn_views.add2, name='add2'),

注意看重点 add 变成了 new_add,但是后面的 name=‘add2’ 没改,这时 {% url ‘add2’ 4 5 %} 就会渲染对应的网址成 /new_add/4/5/
在网页模板中也是一样,可以很方便的使用。

	不带参数的:
	{% url 'name' %}
	带参数的:参数可以是变量名
	{% url 'name' 参数 %}
	 
	例如:
	<a href="{% url 'add2' 4 5 %}">link</a>

上面的代码渲染成最终的页面是

	<a href="/new_add/4/5/">link</a>

想要改网址的时候,修改 urls.py 中的正则表达式部分(url 参数第一部分),name 不变的前提下,其它地方都不需要修改。
比如用户收藏夹中收藏的URL是旧的,如何让以前的 /add/3/4/自动跳转到现在新的网址呢?
要知道Django不会帮你做这个,这个需要自己来写一个跳转方法:
具体思路是,在 views.py 写一个跳转的函数:

	from django.http import HttpResponseRedirect
	from django.core.urlresolvers import reverse  
	
	 
	def old_add2_redirect(request, a, b):
	    return HttpResponseRedirect(
	        reverse('add2', args=(a, b))
	    )

urls.py中:

    url(r'^add/(\d+)/(\d+)/$', learn_views.old_add2_redirect),
    url(r'^new_add/(\d+)/(\d+)/$', learn_views.add2, name='add2'),

这样,假如用户收藏夹中有 /add/4/5/ ,访问时就会自动跳转到新的 /new_add/4/5/ 了
6.1.3打开开发服务器并访问:

	python manage.py runserver 8002
	默认端口是 8000,上面使用了自定义端口 8002
	如果提示 Error: That port is already in use. 我们可以在后面加上端口号8001,8888等

6.1.4用浏览器浏览:

	打开网址:http://127.0.0.1:8002/add/ 就可以

6.1.5给a和b传值:

	我们在后面加上 ?a=4&b=5,即访问 http://127.0.0.1:8002/add/?a=4&b=5

6.2.采用 /add/3/4/ 这样的网址的方式
6.2.1修改 mysites/learn/views.py文件:(新定义一个add2 函数)

	def add2(request, a, b):
	    c = int(a) + int(b)
	    return HttpResponse(str(c))

6.2.2修改 mysites//urls.py 文件:(添加一个新的网址)

	   path('add/<int:a>/<int:b>/', learn_views.add2, name='add2'),

6.2.3打开开发服务器并访问:

	python manage.py runserver 8002
	默认端口是 8000,上面使用了自定义端口 8002
	如果提示 Error: That port is already in use. 我们可以在后面加上端口号8001,8888等

6.2.4用浏览器浏览:

	打开网址:http://127.0.0.1:8002/add/ 就可以

6.2.5给a和b传值:

	我们在后面加上4/5/,即访问 http://127.0.0.1:8002/add/4/5/

七、访问网页

7.1打开开发服务器并访问:

	python manage.py runserver 8002
	默认端口是 8000,上面使用了自定义端口 8002
	如果提示 Error: That port is already in use. 我们可以在后面加上端口号8001,8888等

7.2用浏览器浏览:

	打开网址:http://127.0.0.1:8002/learn/ 就可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值