django学习笔记

    技术2022-07-11  140

    django学习笔记

    django学习笔记通过django-admin创建django项目运行项目通过专业版pycharm创建让局域网内的主机访问项目创建APPDebug模式URL与视图URL与视图函数的映射自定义urls.py路径获取URL中的参数查询字符串URL中的参数 URL转换器URL 模块化Url命名及反转应用命名空间re_path

    django学习笔记

    通过django-admin创建django项目

    进入要创建项目的目录;进入虚拟环境;执行:django-admin startproject [项目名称]

    运行项目

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

    通过专业版pycharm创建

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

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

    在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站点。

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

    创建APP

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

    Debug模式

    开启Debug模式的好处:

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

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

    URL与视图

    URL与视图函数的映射

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

    自定义urls.py路径

    为什么django会去urls.py中找url和视图的映射关系? 在settings.py中配置了ROOT_URLCONF指向了urls.py,可以自定义。 urlpatterns变量的作用: 在urls.py文件中有一个urlpatterns变量,django会从这个变量中读取所有的匹配规则。 url和视图函数的匹配规则需要使用django.urls.path或django.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转换器有两个作用:

    例如指定了转换器为int时,传入的参数不能通过int转换时会报404,找不到对应的url。

    传入的参数不使用url转换器的情况下,视图函数中拿到的url参数默认是字符串,使用url转换器时会转换为整形。

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

    URL 模块化

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

    在app目录下创建urls.py。

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

    在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,就会造成冲突。 解决办法:

    在app中的urls.py中定义:应用名称 app_name。使用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,防止转义。

    Processed: 0.010, SQL: 9