• Djingo之路由层


    Django必会操作之三剑客

    三剑客之render

    作用:返回request,和一个html页面,可以给html页面传值

    三剑客之HttpResponse

    作用:向网页返回一串字符串

    redirect

    作用:重定向

    如何在浏览器中输入网址访问响应资源

    1. 用户能够在浏览器中输入网址访问到相应的资源(前提是后端暴露这个资源的接口)
    2. 在django中如果你想让用户访问到对应的资源,就需要在urls.py中设置对应关系,否则就访问不到
    3. 返回给浏览器的html页面上所有的静态资源,也需要请求后端加载获取
    4. 通常外面将所有的html文件全部放在templates文件夹下
    5. 所用到的所有静态资源全部放在static文件夹中
      • 静态资源如
        • js文件
        • css文件
        • 第三方代码 bootstrap elementui layui

    配置静态文件

    #在urls.py中找到静态资源访问的接口前缀
    STATIC_URL='/static/' 
    #之后手动对静态文件访问进行配置
     STATICFILES_DIRS = [
            os.path.join(BASE_DIR,'static'),]
    #是不是以为这样就行了?哈哈哈哈你在想啥呢?当然不可能啊
    #那到底要怎么样嘛
    #这个时候还需要在你需要访问的HTML页面中添加静态文件路径解析
    {% load static %}
    <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"> 
    #于是乎,你就能在自己写的静态文件中使用这些文件了
    

    Django配置数据库连接

    在Django中有默认的一个数据库,但是由于功能不是很强大,某些方面也不是很行,对于日期格式的处理简直是不行的不能再不行了,那么这个时候我们就需要告诉他,我们不用默认数据库,需要使用MySQL数据库。

    #首先在sttings文件中找到DATABASES在里面进行配置
    DATABASES={
    	'default':{
    		'ENGINE':'django.db.backends.mysql',
    		'NAME':'xxxx', #告诉django我需要使用的库的名字
    		'USER':'root',
    		'PASSWORD':'asdfweafewf',	#你的数据库密码,当然这不是我数据库密码!哈啊哈哈哈
    		'HOST':'127.0.0.1',		#数据库需要访问的ip
    		'PORT':3306,
    		'CHARSET':'utf8'
    	}
    }
    ##是不是觉得这样就可以用了???启动项目试试不就知道啦?
    #是不是没启动哈哈哈哈哈
    #其实把,是因为Django使用的是mysqldb模块连接的,但是这个模块的兼容性不好,所以我们还需要告诉他,老子现在要用pymysql连接了
    	#在你Django项目文件夹或者应用名文件夹下面找到__init__文件或者应用名下的__init__文件中都可以指定
    #首先导包,对吧肯定要先导包啊,包都不导了?你以为导包侠的名号白叫的???
    import pymysql
    pymysql.install_as_MySQLdb()
    

    Request对象

    那么讲完上面的那些需要配置的东东了,这个时候我们就该讲讲正经的了,不要觉得自己可以下车啊,车门已经焊死了!

    那么Request对象是用来干嘛的呢?当时用来嘿嘿嘿的拉

    那么怎么使用呢

    request.method

    用于获取前端的请求方式,并且使用大写的字符串形式

    那么说到这个,不得不在港港我们之前提到的老相好请求方式

    请求方式之GET请求
    #get请求能够携带数据,但是携带的数据会直接拼接在url后面,够安全,同时对数据大小有限制
    request.GET	#相当于一个大字典,里面放的是get请求携带过来的数据
    request.GET.get('key')	#默认取的是列表的最后一个元素 并不是直接将列表取出
    request.GET.getlist('key')	#直接将value的列表取出来
    
    请求方式之POST请求
    request.POST	#也是相当于一个大字典,但是里面放的是POST请求携带过来的数据
    request.POST.get('key')  # 默认取的是列表的最后一个元素 并不是直接将列表取出
    request.POST.getlist('key')  # 直接将value的列表取出
    

    From表单

    那么上面的两个请求都有啥用呢,这不,在这里就用上了。

    那么先讲讲form表单的参数把,毕竟人家是HTML的是吧
    <from action="" method="">
    	action:  1.不写表示往默认地址提交
    			 2.写后缀/index表示朝着本网站的index路径提交数据
    			 3.写全路径 http://www.xiaohuar.com(比如校花网把,毕竟人生苦短多看看妹子,万一你们这群单身狗有女朋友了呢对吧!)
    	method:  表示from提交数据的方式,一般默认是使用get方式提交
        	     也可以设置POST的方式提交
    </from>
    

    Djingo请求的声明周期

    上面既然都讲过了常用的两种请求了,那么这里我们在讲讲请求的生命周期把

    img

    路由层(路由分发)

    那么首先来说说路由层和视图层的一个关系把

    路由层来负责将任务正确的分发给视图函数,而在分发的过程中有许多中情况,这个时候就引出了下面的

    分组(由于使用的是正则,而正则还可以使用分组的方式)

    • 无名分组(在普通正则匹配后面加上()就是无名分组)
    • 有名分组(有名分组就是在无名分组的基础上加了名字)

    无名分组

    urlpatterns = [
    	url(r'^login/([0-9])',views.login)
    				#(在/后面加了括号就是无名分组)
    ]
    #同时在views中需要额外增加一个形参来用于接收传递过来的分组数据
    def login(request,xxx):
    	return HttpsRespon('接收到了。。。')
    

    有名分组

    urlpatterns = [
    	url(r'^login/(?P<year>[0-9])',views.login)
    				#(在/后面加了括号就是无名分组)
    ]
    #同时在views中形参就必须是year
    def login(request,year):
    	return HttpsRespon('接收到了。。。')
    

    分组之反向解析

    软件开发刚开始的时候,url地址的路径可能并不完美,后期需要调整,可是如果很多地方使用了该路径,那么一旦路径发生变化,就意味着所有地方都要经行修改

    那么有没有解决方案呢?
    有!但是我不想告诉你略略略

    好吧解决方案就是:在urls中添加一条

    url(regex,view,kwargs=None,name=None)

    那么这样就可以通过参数name为url地址的部分起一个别名,项目中就可以通过这个别名来获取路径了,这样无论之后怎么改,都能访问,是不是很牛逼!!

    那么我们先来说说 无名分组的反向解析把

    #无名分组
    urlpatterns = [
    	url(r'^login/([0-9])',views.login,name='xxx')
    				#(在/后面加了括号就是无名分组)
    ]
    #前端解析
    <a href={% url 'xxx'1 %}>222</a>
    #是不是以为前端解析完了就没事了?哈哈哈哈哈,运行了 一下是不是发现报错啊,以为我框你呢?
    #其实是还要给后端也解析一下
    #首先!导包!!!!
    from django.shortcuts import reverse #用于后端的反向解析
    url = reverse('xxx',args=(1,))
    

    有名分组的反向解析

     url(r'^test_addsajdsjkahdkjasjkdh/(d+)/', views.testadd,name='xxx'),
        #前端解析
    <a href="{% url 'xxx' 1 %}">222</a>
    <a href="{% url 'xxx' year=1 %}">222</a>
    
        #后端解析
    url = reverse('xxx',args=(1,))
    url = reverse('xxx',kwargs={'year':123})
    
  • 相关阅读:
    vue中的组件传值
    Object中defineProperty数据描述
    promiseall的使用场景
    babel安装及使用
    checkbox属性checked="checked"已有,但却不显示打勾的解决办法
    【转载】表单验证<AngularJs>
    CSS3 :nth-child()伪类选择器
    【转载】浏览器加载和渲染html的顺序
    css制作的61种图像
    网站链接样式设置
  • 原文地址:https://www.cnblogs.com/ledgua/p/11734285.html
Copyright © 2020-2023  润新知