day2_Django视图和URL配置

view的主要职责
响应请求
调度Model,处理业务逻辑
响应请求

基本开发流程

创建App,定义view里的函数
在每个App的views.py中,定于一个hello函数
def hello(request):  # 必须要有一个request参数 
	print("函数"
函数返回响应

每个view必须要有响应,返回一个HttpResponse

om django.shortcuts import HttpResponse,render

def hello(request):
	return HttpResponse("<h1>view基本开发流程</h1>")
或者
    return render(request,'xxx.html')
定义访问路径

在urls.py中,为每个view定义访问路径

from django.urls import path
from view_app import views   # 引入views模块中的hello
#from view_app import views
urlpatterns = [
	path("admin/",admin.site.urls),
	path("hello/",views.hello)            # 添加view中的配置
]
启动服务
在terminal终端中
python manage.py runserver	默认ip和端口启动
python manage.py runserver 端口号	#以固定端口运行
python manage.py runserver ip:端口号	#以固定ip 访问,注意,需要更改settings.py中的ALLOWED_HOSTED=['*']
访问view
http://localhost:8000/hello/
httl://本机ip:8000/hello/
总结
 1、python manage.py runserver == 在菜单项中点击run   localhost:8000
 2、可以修改默认端口 python manage.py runserver 8899
 3、以第一种方式或第二种方式启动的服务器,只能使用 127.0.0.1 来访问  其它客户端无法访问
 4、如果想让其它电脑能够访问服务器,python manage.py runserver  自己电脑的ip:端口号
    还需要在settings.py文件中修改allowed_hosts=["自己电脑的ip"]
   或者 python manage.py runserver 0.0.0.0:8899  -- allowed_hosts=["*"]

URL配置

作用
URL本质是告诉Django,哪个函数调用代码
一般配置
from django.contrib import admin
from django.urls import path
from view_app.views import hello
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/',xxx)              # http://localhost:8000/hello/
    path('hello/world/',xxx)        # http://localhost:8000/hello/world/
    path('hello/world/a/b/',xxx)    # http://localhost:8000/hello/world/a/b/
]
正则配置
from django.contrib import admin
from django.urls import path, re_path   # 引入 re_path 函数
from view_app.views import hello
urlpatterns = [
	path('admin/', admin.site.urls),
	re_path("hello/\\d{3}/",hello),   # localhost:8000/hello/三个整数/
	re_path(r"hello/\d{3}/",hello),   
	re_path(r'hello/\d{2,5}/\w+/',hello), # locahost:8000/hello/12415/dfasdf									# locahost:8000/hello/12415/abc/def/
    re_path(r"hello/[a-d]*/$"),    # localhost:8000/abchello/abcaa/
    re_path(r"^hello/[a-d]*/$"),    # localhost:8000/hello/abcaa/
  ]
URL技巧
在每个APP中,创建自己的urls.py,然后在总的urls.py中加上
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('dangdang/',include('dangdang.urls')),
]
加上include函数
注意:
	如果app中views中有多个函数,可以进一步划分

命名路径

基本使用
path("xxx/<参数一>/<参数二>/',xxx)		可以匹配任何路径的参数
注意:
	有了命名路径,view的函数必须有对应的接收参数
命名路径转化器
作用:
	对上面的命名路径进行限制
int	整数
str	字符串
path	可以接收包含’/‘的路径
slug	只有字母、数字、下划线和中划线组成
使用:
	<int:参数一>
正则命名路径
正则路径匹配且捕获数据
需要在view视图中的函数,用相关的参数接收。用括号括起来的就为要匹配到的
re_path("hello/(\d{3})/",hello1)
def hello1(request,a):
    print(a)
    return HttpResponse("Done!")
 注意此时的参数是随意指定的。
正则命名路径且捕获数据
也就是对上面的正则命名路径加个指定参数接收
re_path("hello/(?P<age>\d{3})/",hello1)  
def hello(request,age):
    print(age)
    return HttpResponse("Done!")  
总结
 目的:捕获url中的参数值
 1. 基本的命名路径    path("xxx/<name>/<age>/",xxx)   可以加转换器:限制参数的类型
                     def hello(request,name,age)  视图函数中的参数名要和path中的名字保持一致

 2. 正则路径捕获参数  re_path("xxx/(\d{3})",xxx)
                    def hello(request,a)         视图函数中的参数名字无要求
 3. 正则命名路径且捕获参数    re_path("xxx/(?P<id>\d{3})/",xxx)
                           def hello(request,id)   视图函数中的参数名要和path中的名字保持一致                 

请求处理

获取请求的几种方式
用户发送请求
服务器接收请求
服务器处理请求并返回响应
超链接	<a href="">
bom操作	location.href=""
form表单	<form action="">
接收请求参数
方式一
命名路径
正则路径
正则命名路径
方式二
常规的参数接收,用request对象接收
超链接传参
url/?key=value&key1=value1
表单传参
<form action="http://localhost:8000/hello6/" method="get">
	用户名:<input type="text" name="name" >
	密码:<input type="password" name="pwd">
	<input type="submit" name="" value="提交">
</form>

接收参数

使用get传参的:
	request.GET			返回字典,可以根据字典的方式取值
使用POST传参的:
	request.POST		同上
一般推荐用request.GET.get(name)	取不到不会报错
<form action="http://localhost:8000/hello6/" method="post">
    {% csrf_token %}
	用户名:<input type="text" name="name" >
	密码:<input type="password" name="pwd">
	<input type="submit" name="" value="提交">
</form>
主要POST需要加个 {% csrf_token %}
作用:
	csrf_token 是为了防止csrf(跨站请求伪造),什么是csrf,
	更简单的说:就是防止黑客盗用你存在网站(cookie)上的账户密码和信息
GET与POST的区别
POST安全性好于GET,GET中的请求参数直接暴露于url上;传递密码等敏感数据时,不使用GET。
GET对数据长度有限制,URL 的最大长度是 2048 个字符,POST无限制。
HTTP的语义中GET请求用来查询数据,POST用来提交数据
GET只允许 ASCII 字符。POST可以传递各种数据,二进制也可以。
GET可以缓存,POST不能缓存
简介:
	GET不安全,用户输入的数据能被看到,常用于查询和删除请求
	POST安全,常用于增加和更新请求
接收多只参数
比如:
	复选框
使用request.GET.getlist(name)	获取到的是每个值组成的列表
在Django中加载图片
settings.py
 STATIC_URL = '../static/'
2 STATIC_ROOT = os.path.join(os.path.dirname(__file__),'static')
3 # 设置图片等静态文件的路径
4 STATICFILES_DIRS = (
5     ('css',os.path.join(STATIC_ROOT,'css').replace('\\','/') ),
6     ('js',os.path.join(STATIC_ROOT,'js').replace('\\','/') ),
7     ('images',os.path.join(STATIC_ROOT,'images').replace('\\','/') ),
8     ('upload',os.path.join(STATIC_ROOT,'upload').replace('\\','/') ),
9 )
复制代码
在urls.py第一行加入
1 from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
设置静态目录:
	static和templates在同一级目录
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值