Django(二)--学习:

在这里插入图片描述

  在我们运行了我们第一个Django项目后,我们怎么让本局域网的主机访问我们的网站呢?

准备工作!

Pycharm下:
    点击文件—>创建项目(然后选择我们的虚拟环境
 
命令行下:
    在我们想创建的路径下,打开CMD输入django-admin startproject [项目名]
 
  在Pycharm中启动我们的项目:python manage.py runserver 0.0.0.0:99 (保证局域网主机能够访问到我们)
 在命令行中 python manage.py runserver 0.0.0.0:99

第一次访问

  我们可使用手机、虚拟机、电脑等等来进行第一次访问
 
  这里我使用虚拟机来进行使用,在用虚拟机时,我们需要配置一些东西
    (1) 将虚拟机的网络设置为NAT或桥接
    (2) 用虚拟机来ping一下我们的真机来以此确保网络联通
网图
当我们ping通了即可进入下一步了
 
在我们的浏览器中输入我们的IP地址及端口(IP:PORT)
(这里需要注意的是,如果是老版的IE需要我们输入http://ip:port 因为老版IE并没有自动添加http://这个功能

访问成功后

如图示例:

在这里插入图片描述
  大家可能会可能会有些黑人问号 为什么我们在本主机访问的页面和我们在虚拟机的不一致在这里插入图片描述
  我们通过页面提示信息,不难猜出 ALLOWED_HOSTS 是在我们项目的settings.py文件下,那是为什么的。
 
可以看得到ALLOWED_HOSTS模式为空
ALLOWED_HOSTS就是允许被访问的主机,在ALLOWED_HOSTS变量中IP才能被访问,默认为127.0.0.1
 
也就是说,我们访问失败的原因就是出这,我们只需要在ALLOWED_HOSTS中添加允许访问的主机IP即可
   需要注意的是,一旦我们对ALLOWED_HISTS添加了内容,我们的127.0.0.1也不能进行访问了(需要添加到ALLOWED_HOSTS中

访问成功

在这里插入图片描述

DEBUG模式

   不知道大家有没有发现,当我们修改项目的代码时,项目会自动的对其进行更新!
 
这其实就是DEBUG模式下的一个特性
 
但是,大家有没有发现,一旦我们代码写错也会对应的报错
 
到我们开发的时候,对用户的体验不会很好(需要注意)

URL映射

  在我们学习URL映射之前,我们可以先将URL想象成一个地图的一个地点,我们需要有url才能找到那个地方
  小案例:
在我们项目的urls.py中添加
 
from django.http import *
def index(request):
    return HttpResponse(‘首页’)
 
然后在我们的urls.py中添加路由记录
urlpatterns = [

path(’’,index)

]
 
运行:python manage.py runserver
在浏览器中输入127.0.0.1:8000 可以看到的我们的页面从Djnago的默认页面变成了首页(是不是有一点点神奇呢)

综上所述

我们可以看到的URL映射,我们的path映射到我们所定义index函数中,形成了URL—>视图(view)
 
 但是我们这样做映射会不会有些麻烦呢,所以Django给我们了一个方法:
   -我们可以用 python manage.py startapp [App名字]
我们可以将功能放在一个APP中来进行管理和维护

小案例

在我们创建App中,views中创建一个index和login来做一个映射
 
(一)打开我们的项目
(二)在项目的urls.py中添加: from [App名].views import *
(三)然后在App名下的views.py添加我们的视图函数:
def index(request) :

'''
创建APP,并添加两个视图函数
(一)打开我们的项目
(二)在项目的urls.py中导入我们视图包
(三)然后在APP目录下的views.py添加我们的视图函数
'''
from django.http import *#导入所需的包

def index(request):#request为默认值 
    return HttpResponse('首页')

def login(request):#登录页面
    return HttpResponse('登录页面')
#视图的返回结果必须是django.https.response.HttpResponseBase对象或者子类的对象.



当我们建立好视图函数之后,我们不过有了视图,也就是说建好了一个地方,但是不知道怎么去

(二)做URL映射
在我们项目下的urlpatterns添加映射关系
urlpatterns = [
	...
	path('',index),#也就是说当我们输入IP:PORT为空的时候,访问的网站
	#需要注意的是,一旦我们由了URL映射关系,Django自带的那个网页就会消失了
	path('login',index)#当我们在浏览器导航条中输入IP:PORT加我们/login即可访问成功!
	]

虽然是个简单的项目,但是大家想想,一个网站的信息很多,如果用这种映射方法会不会很麻烦呢,第二个知识点!

参数传递

在我们访问百度搜索信息时,可以看到的URL后的一大串字符,那是什么呢?
  那些是我们访问一个页面所带的信息
 
而我们可不可以页怎么做呢

修改我们的login视图
def login(request):
    Get = request.Get.get('username')
    if Get:
        return HttpResponse('欢迎! %s' %Get)
    return HttpResponse('登录页面')

我们在导航条,输入127.0.0.1:8000/login/?username = abc

访问成功:
在这里插入图片描述

接下来我们来学习第二种参数传递方法

URL参数传递

  有时候,url中包含了一些参数需要动态调整,比如简书的某篇文章的详情页的url,是http://www.baidu/p/,其中的id就是文章的id,那么如何在django中实现我们的需求,这时候就可以在我们的path函数中,用尖括号来定义一个参数

示例:

views.py下
def goods(request,commodity):
   if commodity:
       return HttpResponse('您已购买 %s' %commodity)


我们定义了一个goods的路由,需用户输入商品名字
urlpatterns = [
	...
	path('goods/<commodity>',goods)
	...
]

当我们在导航条输入127.0.0.1:8000/goods/苹果时,访问结果:
在这里插入图片描述  URL传递参数,可带多个参数,是一种以变量来进行赋值操作的,我们可通过 request.Get.get来进行访问查找


PATH传递参数的形式

形式:path(route,view,name=None,kwargs=None).
   route就是我们要传递的参数的URL,用<>来定义,默认的类型为str

  • int 类型 匹配0或正数的整型
  • str 类型为我们默认的类型 其中不能包括斜杠
  • slug 可以由-和_组成的英文字母或数字而组成的字符串
  • uuid:匹配uuid的字符串
  • path:匹配非空的字符串(可以包含\)

那么我们将一个个来给大家介绍

int 类型

int类型就是只能传入整型(数字)
比如我们在url中添加我们的一条路由记录

urls下:
urlpatterns = [
	....
	url('book\<int:page>',
	....]
views下
def book(request,page):
    text=  '页数为{}'.format(page)
    return HttpResponse(text)
    

在网页中输入127.0.0.1:8000/book/1
在这里插入图片描述

str类型

urls.py下
urlpatterns = [
	...
	path('book/<author>',author),#因为默认类型就是为str类型
	...

views.py
def author(request,author):
    text = '本书作者为{}'.format(author)
    return HttpResponse(text)
    

slug类型

urls.py下
urlpatterns = [
	...	
	path('Verification_Code/<slug:number>',verification)	
	...
]

views.py
def verification(request,number):
    return HttpResponse('验证成功!')

在浏览器中输入127.0.0.1:8000/Verification_Code/1-2

uuid

urls.py下
urlpatterns = [
	...
	path('Serial_Number/<uuid:num>',Serial),
	...
]

views.py下
def Serial(request,num):
    txt = 'uuid为:{}'.format(num)
    return HttpResponse(txt)

大家可能会有所疑惑,那我们怎么生成我们的uuid呢

  • 1)我们在CMD中输入python
  • 2)导入库(import uuid)
  • 3)print(uuid.uuid4())

在我们的浏览器中输入http://127.0.0.1:8000/Serial_Number/26d030ad-aaba-4036-92c5-ebdaec42a001
成功访问:
在这里插入图片描述

path

path匹配非空的字符串(可匹配斜杠)
urls.py下:
urlpatterns = [
	...
	path('txt/<path:n>',i)
]

views.py下
def i(request,n):
    return HttpResponse('欧克')

终于写完了,在此祝大家国庆假期快乐哟!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值