• django笔记1


    1.需求:访问某年出版的书返回给用户

    ①错误方式如下:如果url中含有正则参数,视图函数中必须传入相应的参数,否则会出现如下错误

    url(r'^book/(\d+{4})/', views.index),


    def index(request):
       return HttpResponse('2000')

    1

    ②正确方式如下:正则分组中的参数会传入视图函数的参数中,因此视图函数必须加入参数

    url(r'^book/(\d{4})/', views.index),


    def index(request,year):
       print(year)
       return HttpResponse(year)

    2.需求:访问某年某月出版的书返回给用户

    url(r'^book/(\d{4})/(\d{1,2})/', views.index),


    def index(request,year,month):
       print(year,month)
       return HttpResponse(year)

    ①错误方式如下:如果url中没有参数,视图函数中写了参数,则会出现如下错误

    url(r'^book/', views.index),


    def index(request,year,month):
       print(year,month)
       return HttpResponse(year)

    image-20200620121754642

    2.有名分组:

    url(r'^book/(?P<year>\d{4})/(?P<month>\d{1,2})/', views.index),
       #相当于参数传入到{"year":2000,“month":12}
       
       
    def index(request,year,month):
       print(year,month)
       return HttpResponse(year+month)
    #year和month顺序无所谓,但是必须和分组名一样

    3.url匹配顺序:

    ①匹配顺序从上到下,匹配到后就执行,例如输入:/book/2002/12,走第一个url

    第一个:url(r'^book/(\d{4})/', views.index),


    第二个:url(r'^book/(?P<year>\d{4})/(?P<month>\d{1,2})/', views.index),
     

    ②解决方案:完全匹配

    第一个:url(r'^book/(\d{4})/$', views.index),


    第二个:url(r'^book/(?P<year>\d{4})/(?P<month>\d{1,2})/$', views.index),

    4.关于输入url中是否结尾加""问题:

    ①如果输入不加“\",django会发一个重定向让浏览器加上”\"

    image-20200620125445627

    ②当在setting中设置APPEND_SLASH=False时,如果输入url中部包含“\”会报错

    image-20200620130143475

    5.视图函数中指定默认值:

    image-20200620130829888

    6.url路由分发之include:

    ①在每个app目录下创建一个urls.py文件

    匹配过程:用户输入app01/index/,先把前面app01拿出来,后面再到app01应用下去匹配index/

    1.根目录下:
    urlpatterns = [
       url(r'^app01/', include('app01.urls')),
       url(r'^app02/', include('app02.urls')),
    ]
    2.app01目录下:
    urlpatterns = [
       url(r'^index/', views.index),

    ]
    3.app02目录下:
    urlpatterns = [
       url(r'^home/', views.home),

    ]

    7.pycharm中提供一个简便的执行python manage.py工具:

    image-20200620133832820

    8.首页url写法:

    ①如果按照下面写法,不管url是什么,都只能映射到第一个url路由中

    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'',views.base),     #空表示什么路径都能匹配到
       url(r'^app01/', include('app01.urls')),
       url(r'^app02/', include('app02.urls')),
    ]

    ②解决方案如下:写成完全匹配

    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'^$',views.base),     #空表示什么路径都能匹配到
       url(r'^app01/', include('app01.urls')),
       url(r'^app02/', include('app02.urls')),
    ]

    9.应用程序首页url写法:

    ①在应用程序的url中写完全匹配

    image-20200620141134042

    10.模板中a标签中写url定位格式为:

    ①直接写相对路径即可,两边加上"/"

    1.模板中:
    <a href="/app01/index/">app01应用</a>
    <a href="/app02/home/">app02应用</a>

    2.根目录中:
    urlpatterns = [
       url(r'^app01/', include('app01.urls')),
       url(r'^app02/', include('app02.urls')),
    ]

    11.HttpRequest对象:

    ①输入:http://127.0.0.1:8000/app01/index/?name=123&password=123

    1.print(request.GET)  # 给请求提交的数据
        <QueryDict: {'name': ['123'], 'password': ['123']}>
    2.print(request.POST)  # 给请求提交的数据
    <QueryDict: {}>
    3.print(request.META)  # 请求头相关信息
    一个字典{ 。。。 }包含很多东西
    4.print(request.path)  # /index/ 路径
    /app01/index/
    5.print(request.path_info)  # /index/ 路径
    /app01/index/
    6.print(request.get_full_path())  # 完整路径带参数
    /app01/index/?name=123&password=123  
           

    ②表单中的post请求如果为空,表示提交当前页面的url

    <form action="" method="post">
    用户名: <input type="text" name="username">
    密码: <input type="text" name="password">
     <button>提交</button>
    </form>

    ③表单中的post请求提交后

    1.print(request.POST)  # 给请求提交的数据
    <QueryDict: {'username': ['123'], 'password': ['123']}>
    2.print(request.body)  # 提交过来的原始数据
    b'username=123&password=123'

    12.HttpResponse对象:

    image-20200620152434349

    ①重定向redirect:告诉浏览器让它重新发送请求


    def index(request):
       return redirect('/app02/home/')

     

  • 相关阅读:
    SpringBoot入门1
    git
    Linux 常用命令
    Linux虚拟机上安装redis
    用户登录(Material Design + Data-Binding + MVP架构模式)实现
    【方法总结】创建、读取、删除文件相关操作
    从源码角度入手实现RecyclerView的Item点击事件
    App启动页倒计时功能
    App内切换语言
    GreenDao与ReactiveX的完美搭配
  • 原文地址:https://www.cnblogs.com/zhuxianxiaofan/p/13168947.html
Copyright © 2020-2023  润新知