django学习笔记

django学习笔记

通过django-admin创建django项目

  1. 进入要创建项目的目录;
  2. 进入虚拟环境;
  3. 执行:django-admin startproject [项目名称]
    在这里插入图片描述

运行项目

  1. 命令行:
    进入django项目根目录执行:python manage.py runserver [指定端口号]
    默认是绑定的8000端口,可以自定义端口号。
    在这里插入图片描述
  2. pycharm专业版:
    在这里插入图片描述

通过专业版pycharm创建

在这里插入图片描述

让局域网内的主机访问项目

  1. 启动项目时,设置为0.0.0.0:8000,例如: python manage.py runserver 0.0.0.0:8000

  2. 在settings.py中设置: ALLOWED_HOSTS = [“本机IP地址”]
    关于:ALLOWED_HOSTS配置作用:
    ALLOWED_HOSTS是用来设置允许哪些主机访问我们的django后台站点。
    如果项目没有部署到远程服务器,且DEBUG = True(线下模式,允许调试),默认 有ALLOWED_HOSTS = [‘localhost’, ‘127.0.0.1’, ‘[::1]’],即默认允许本地主机访问django后台。
    如果项目上线部署到远程服务器,那就必须设置allow_host为本地的ipv4(也就是你需要去访问该项目的主机的IP地址),不过地址(设置为"*"也可以,但是不安全,因为所有IP都可以访问),否则本地是无法访问远程的django站点。

  3. 远程局域网主机通过 “http://部署django的主机IP地址:端口号” 访问django项目。

创建APP

django本身对代码的目录结构已经做了规范。 不同模块的代码可以创建不同的app,将对应的代码写在自己的app中。
通过 “python manage.py startapp [app名称]”创建app。
在这里插入图片描述
创建生成的app目录中会自动创建常用的代码文件,例如:views.py是写视图代码的文件、tests.py是写单元测试的文件、models.py是写模型的文件等。
在这里插入图片描述

Debug模式

开启Debug模式的好处:

  1. 代码出错时,在浏览器和pycharm中都会打出详细的错误栈,方便问题排查。
  2. 修改了代码后,按Ctril+s会自动重启服务。

**注:**生产环境中一定要关闭Debug模式,否在会将代码目录泄露,存在安全隐患。关闭后,需要设置ALL OWED_HOSTS,指定哪些IP地址或域名可以访问服务。
在这里插入图片描述

URL与视图

URL与视图函数的映射

  1. 创建app book:
    在这里插入图片描述
  2. 在app中写视图函数:
    (1)视图函数返回值必须是HttpResponseBase或HttpResponseBase的子类。
    (2)视图的第一个参数永远都是request(一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。
    在这里插入图片描述
  3. 在urls.py中声明url和视图函数的映射关系:
    在这里插入图片描述

自定义urls.py路径

  1. 为什么django会去urls.py中找url和视图的映射关系?
    在settings.py中配置了ROOT_URLCONF指向了urls.py,可以自定义。
    在这里插入图片描述
  2. urlpatterns变量的作用:
    在urls.py文件中有一个urlpatterns变量,django会从这个变量中读取所有的匹配规则。
    url和视图函数的匹配规则需要使用django.urls.pathdjango.urls.re_path函数进行包裹,这个函数会根据传入的参数返回URLPattern或者是URLResolver的对象。
    在这里插入图片描述

获取URL中的参数

查询字符串

url中拼接的查询字符串通过视图函数传入的request参数获取。
如下: http://127.0.0.1:8000/book/?number=100,通过request.GET.get获取参数number。
在这里插入图片描述

URL中的参数

在url和视图映射中,通过"<参数名称>"定义url中要传递的参数名称,视图函数中使用同名的参数获取该参数。
如下:
访问:http://127.0.0.1:8000/book/100/
在这里插入图片描述

URL转换器

url转换器有两个作用:

  1. 例如指定了转换器为int时,传入的参数不能通过int转换时会报404,找不到对应的url。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 传入的参数不使用url转换器的情况下,视图函数中拿到的url参数默认是字符串,使用url转换器时会转换为整形。
    在这里插入图片描述
    在这里插入图片描述

  3. 其他转换器:
    通过 from django.urls import converters 可以看到django内置的几种转换器以及详细的匹配规则。
    在这里插入图片描述
    **str:**非空的字符串类型。默认的转换器。但是不能包含斜杠。
    **int:**匹配任意的零或者正数的整形。到视图函数中就是一个int类型。
    **slug:**由英文中的横杠-,或者下划线_连接英文字符或者数字而成的字符串。
    **uuid:**匹配uuid字符串。
    **path:**匹配非空的英文字符串,可以包含斜杠。

URL 模块化

当项目越来越大,接口越来越多时,将所有的url和视图函数放在一起不好管理,可以通过按app划分url的形式将urls.py模块化。

  1. 在app目录下创建urls.py。

  2. 在主urls.py中导入include函数,通过include函数引入app中的子urls.py。
    **注意:**由于子urls.py中的url都是以book开头的,所以在主urls.py中写上book/,django会拼接主urls.py和app中子urls.py中的url路径。

  3. 在app中的urls.py定义url和视图函数的映射,不需要再写book前缀。
    在这里插入图片描述

Url命名及反转

假设在用户没有登录的情况下需要重定向到登录页面:
如下: 访问 http://127.0.0.1:8000/book/时,校验是否参数中的is_login,如果不为True则重定向到/login。
在这里插入图片描述
在这里插入图片描述
重定向时使用"redirect( [url路径] )", 如果url路径使用硬编码,假设login改为了signin,那么除了urls.py中需要修改,视图函数中也需要修改。
解决这个问题的办法就是给url命名:
在定义url和视图函数映射关系是,可以指明name参数,给url命名。在视图函数中通过 reverse(“url名称”) 拿到实际的url。
在这里插入图片描述

应用命名空间

在给url命名时,多个app中有可能存在冲突的情况,例如: app1中使用了name1,app2中也使用了name2,就会造成冲突。
解决办法:

  1. 在app中的urls.py中定义:应用名称 app_name。
  2. 使用reverse反转时使用: “app名:url名”
    在这里插入图片描述
    **注意:**如果这个url中需要传递参数,那么可以通过kwargs来传递参数。示例代码如下:
    reverse(“cms:login”, kwargs={“id”: 1})
    如果想要添加查询字符串的参数,只能手动的拼接。示例代码如下:
    reverse(‘cms:login’) + "?next=/"

re_path

通过使用re_path可以实现一些复杂的url匹配需求。
re_path的参数和path参数一模一样,只不过第一个参数也就是route参数可以为一个正则表达式。

如下图所示:
对于url传入参数的情况,需要用小括号括起来,如果需要指定参数名称则需要用?P<名称>来指定。 语法和re模块语法一致。
**注意:**url字符串要以^开头,$结尾,并且字符串开头要加上r,防止转义。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值