django学习之路(一)

django学习之路(一)

step1:虚拟环境使用

虚拟环境的基本使用

(1)安装:

Windows下: pip install virtualenvwrapper-win
*nix: pip install virtualenvwrapper

(2)创建

mkvirtualenv my_env
解析:my_env是自定义的虚拟环境的名称
默认会在当前用户的路径下新增一个env文件下,下有my_env的文件

(3)切换

Workon 虚拟环境名称

(4)退出

deactivate

(5)删除

rmvirtualenv 虚拟环境名称

(6)列出所有虚拟环境

lsvirtualenv

(7)修改mkvirtualenv的默认路径

环境变量中添加WORKON_HOME,放入你要的路径
新增系统环境变量,以后新建的虚拟环境就在这个目录下了

(8)创建虚拟环境时指定python解释器版本

mkvirtualenv --python==C:\Python\Python37\python.exe my_env
创建时使用的python版本、新建后的项目的python启动文件都会打印出来
创建是使用的python版本、新建后的项目的python启动文件都会打印出来

step2:第一个Django项目

1、认识web

(1)URL 是Uniform Resource Locator 的简写,统一资源定位符
(2)一个url的组成
Scheme、host、port、path、query_string、anchor
在这里插入图片描述
默认端口也是可以通过抓包获取的
在这里插入图片描述
Scheme:代表访问协议,一般有http、HTTPS、ftp等
Host:主机名,域名
Port:端口号,默认http的为80,https的为443
Query-string:查询字符串
Anchor:锚点,后台一般不用关心,前端用来做页面定位的。
注意:URL中所有的字符都是ASCII字符集,如果出现非ASCII字符,比如中文,浏览器会进行编码在进行传输,抓包是转化传输的,urldecode后为https://baike.baidu.com/item/李现/5870690?fr=aladdin
在这里插入图片描述

2、第一个django项目

(1)环境准备

在虚拟环境下查看下安装了那些包 pip list
如果没有安装Django,安装 pip install django

(2)创建第一个工程

第一种:在虚拟环境下执行命令方式 :

django-admin startproject project_demo(project_demo是工程名称)
运行工程
进入项目的路径下 python manage.py runserver
在这里插入图片描述

浏览器访问验证是否服务起来了
在这里插入图片描述

第二种:在pycharm下新建

在这里插入图片描述
运行直接点击上方绿色三角箭头按钮
在这里插入图片描述
注意点
实例可以多个同时运行的问题,会有冲突
解决办法:关闭 allow parallel run即可

在这里插入图片描述
在这里插入图片描述
修改后在多运行时会提示
在这里插入图片描述

3、启动服务修改端口,并开放给其他人

命令行:python manage.py runserver 9000 指定的端口号
Python manage.py runserver 0.0.0.0:9000 0.0.0.0为指定IP地址,不明白的可以在查询下这个ip的含义

Pycharm中:还是在设置中
在这里插入图片描述
关键的一步:给settings文件添加配置,别人就可以 通过这个ip访问你了,如果你自己访问你自己的ip,需要把这个“127.0.0.1”也添加进去方可
在这里插入图片描述

4、项目结构:

(1)Manage.py : 和项目交互基本上都是基于这个文件。
命令格式: python manage.py [子命令 ]
例如:python manage.py help 看看能做什么事情。 除非你知道自己在干什么,一
般情况不应该修改这个文件。
(2)Settings.py: 本项目的设置项,和项目相关的配置项都是放在这里
(3)Urls.py:这个文件是用来配置url路由的,比如访问http://127.0.0.1:8000/news/是访问新闻页,这
些东西需要在这个文件完成。
(4)Wsgi.py:项目与wsgi协议兼容的web服务器入口,部署的时候需要用到,一般情况下也不需修
改。

5、app模型

(1)修改django默认的返回页面

重启服务再次访问(我踩过的坑:index()没有给入参request)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)新建app
(1)这样是不是结构不清晰了,换一个文件放置视图函数-----传说中的app模型
按照功能或模块进行分层 ,分成一个个app,所有和某个模块相关的视图都写在对应的app的
view.py中,并且模型和其他的也是类似。
首先:学习快速创建app
虚拟环境下:python manage.py startapp city(项目名)区别和新建项目的命令 django-admin
在这里插入图片描述
pytcharm打开的目录结构:
在这里插入图片描述

6、DEBUG模式

 (1)	如果开启了debug模式,那么以后我们修改了Django项目的代码,然后按下ctrl+s保存,
            就会自动的给我们重启项目,不需要手动重启。
(2)	如果开启了debug模式,那么以后Django项目中代码出现了bug,那么在浏览器中和控制台会
           打印出错误。
(3)	在生产环境中,禁止开启debug模式,不然有很大的安全隐患。

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、ALLOWED_HOSTS

这个变量是用来设置以后别人只能通过这个变量中的url来访问项目
在这里插入图片描述

8、视图与URL分发器

(1) 视图一般都写在APP的views.py中,并且视图的第一个参数永远都是request(一个
HttpRequest)对象,这个对象储存了请求过来的所有信息 ,包括携带的参数一级一些头部信息
等。在视图中,一般是完成逻辑相关的操作。比如这个请求是添加一篇博客,那么可以通过
request来接收到这些数据,然后 储存到数据库,最后再把执行结果 返回浏览器。视图函数的返
回结果必须是httpResponeBase对象或者子类的对象。
(2) 视图第一个参数必须是 request,这个参数绝对不能少。视图函数的返回函数必须是
django.http.response. HttpResponse
(3) 为什么要在urls.py找映射 在urls.py中找urlpatterns 映射不是随便写的,是path函数或者re_path
中包装的。
在这里插入图片描述

(4)url中添加参数

第一种:url里/ 分割的参数

book的app下的views.py文件去写视图函数
book的app下的views.py文件去写视图函数
主工程中urls.py文件对视图函数映射主工程中urls.py文件对视图函数映射
浏览器访问结果

第二种:参数用?的方式传入

app中views.py中写视图函数app中views.py中写视图函数
主项目中urls.py中做映射主项目中urls.py中做映射
在这里插入图片描述
在这里插入图片描述

9、django内置自带的url转换器

(1)作用:传递参数的时候需要指定参数类型的时候需要使用url转化器

----------------------------------------------------------------------------------
str: 除了“/”斜杠以外的所有字符都可以
int:一个或多个的数字型
path:所有的字符都满足
uuid:只有满足uuid.uuid4()这个函数返回的字符串格式
slug:英文中的横杠或者英文字符或者阿拉伯数字或者下划线才满足
----------------------------------------------------------------------------------
例子:
 步骤一:
 新增app,在app里的views.py中写视图函数
#encoding=utf-8
from django.http import HttpResponse

def index(request):
    return HttpResponse("首页")

def detail(request,book_id,publisher_id):
    text = "图书id:%s 出版社id是:%s" %(book_id,publisher_id)
    return HttpResponse(text)
步骤二:在主项目的urls.py文件里引用视图函数
这个publisher_id字段接受的就是限制int类型
from book import views
from django.urls import path

urlpatterns = [
    path('', views.index),
    path("detail/<book_id>/<int:publisher_id>/",views.detail)
]

步骤三:运行项目,在浏览器中验证是否限制了int类型
在这里插入图片描述
在这里插入图片描述

(2)查看django自带的url转化器

项目任意地方引用自带转换器的包 from django.urls import converters,然后ctrl+鼠标左键进入conberters的py文件中,查看

在这里插入图片描述

自测uuid的转化器—生产一个uuid
生产一个uuid
在主项目的urls.py中对输入参数限制为uuid
在这里插入图片描述

10、url命名和反转

解决的问题:
(1)为什么需要给url命名?
因为 url是经常变化的,如果在代码中写死可能会经常改代码,给url取个名字,以后使用 url的时候
就使用它的名字进行反转就可以了,就不需要写死url了
(2)如何给一个url命名?
在 path函数中,传递一个name参数就可以指定了,示例:
在这里插入图片描述
在这里插入图片描述
效果
效果
(3)应用命名空间
防止多个app中有重名的url,这时候为了避免反转url的时候产生混淆,可以使用应用命名空间来做
区分。定义应用命名空间:在app的urls文件中定义一个app_name的变量
在这里插入图片描述
在这里插入图片描述
(4)应用命名空间和实例命名空间
一个app,可以创建多个实例,可以使用多个url映射同一个app,所以这就会产生一个问题,以后在做反转的时候,如果使用应用命名空间,就会发生混淆,为了避免这个问题,我们可以使用实例命名空间,只要在include函数中传递一个namespace变量即可,示例如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果
效果
注意点:没有指定应用命名空间,直接指定实例命名空间是不允许的
报错实例

11、ulrs分层模块化

一个url中包含另外一个urls模块
背景:项目中会有多个app, 如果把所有app的views.py中的视图都放入主项目的urls.py中进行映射,代码很乱。
解决:urls分层,在app内部包含自己的url匹配规则,再在项目的urls.py中再统一包含这个app的urls。这个技术就是include函数。
注意点是:(1)include函数中的urls的路径是相对项目的路径
(2)url 是根据主urls.py和子urls.py进行拼接的,因此不要多加斜杠

book的app中新增urls.py文件管理自己的url
book的app中新增urls.py文件管理自己的urls
在这里插入图片描述

12、Include函数详解

(1) Include(modle,namespace=None),
Modle:子模块的字符串
Namespace:实例命名空间,这个地方需要注意一点,如果指定了实例命名空间,必须指定应用命名空间。

path("cms/",include("cms.urls",namespace="cms")),
    path("cms1/",include(("cms.urls","cms"),namespace="cms1")),

(2) Include((pattern_list,app_namespace),namespace=None)
函数第一个参数可以是一个字符串,也可以是一个元组,如果是元组,那么元组的第一个参数是子“urls.py”模块的字符串,元组第二个参数是应用命名空间,也就是应用命名空间在urls.py中app_name变量

path("cms1/",include(("cms.urls","cms"),namespace="cms1"))

(3) Include((pattern_list,app_name),namespace=None)

 path("movie/",include(([
                            path("",views.index),
                            path("login/",views.login)
                            ],"app_movie"),name="movie")),

13、re_path函数

re_path和path的作用都是一样的,只不过re_path是在写url的时候可以用正则表达式,功能更强大。
写正则表达式推荐使用原生字符串,也就是以“r”开头的字符串。
在正则表达式中定义变量,需要使用圆括号括起来,参数有名字的,那么需要使用?P<参数名字>,然后添加正则表达式的规则。示例
在这里插入图片描述
效果

14、Reverse函数

(1) 如何接受/参数
发现这个用request.GET[“username”]页面响应有问题,换成request.GET.get(“username”)
在这里插入图片描述
在这里插入图片描述
(2)?携带的参数
在这里插入图片描述
在这里插入图片描述

15、自定义path转换器

需求:
实现一个获取文章列表的demo,用户可以根据“/article/list/分类 ”中的参数获取文章分类
#第一种:获取python分类
Article/python
#第二种:获取python +django分类
Article/python+django
#第二种:获取python +django+shuxue分类
Article/python+django+shuxue
以此类推

解决的办法:
(1)使用 re_path的办法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(1)使用自定义path转换器的办法
到converters的包里看看别的转化器的写法
遇到两个点:
i、是包不对,找了半天问题
ii、使用了应用命名空间,但在反转的时候没有用命名空间指定,也就是在reverse的时候在全局没有找到,应该在命名空间范围找

包引的不对
包引的不对
没有指定应用命名空间(在对应app的urls.py中定义了应用命名空间)
没有指定应用命名空间(在对应app的urls.py中定义了应用命名空间)
修改后的正确代码是:
在这里插入图片描述
在这里插入图片描述
最后是代码的抽离分层:
(1)app中新建converters.py
在这里插入图片描述
这样在启动服务的时候会报错

在这里插入图片描述
在这里插入图片描述
(2) 因为上面将path转换器的部分抽离后,运行代码的时候不认识cate这个转化器,也就是运行的入口在工程的ulrs这里去找—>在找到article的urls中就发现不认识cate,也就是自定义的转换器没有运行注册上,需要在对应包下Init.py文件去引入即可
在这里插入图片描述

16、URL映射时指定默认参数

views.py文件

#encoding=utf-8

from django.http import HttpResponse

book_list = [
    '三国演义',
    '红楼梦',
    '西游记',
    '水浒传'
]


def books(request,page = 0):
    return HttpResponse(book_list[page])

urls.py文件

from . import veiws

urlpatterns = [
    path('', veiws.books),
    path("page/<int:page>/",veiws.books)
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值