Python——Django框架(一)
参考博文:https://www.cnblogs.com/yuanchenqi/articles/6083427.html
请注意你的Django版本,博主虽然看的视频是Djnago2,但使用的版本是Django 3.1.5,博客会尽可能根据3.1.5此版本来写,但不一定写得完整。
一、MVC模式与MTV模式
1、MVC模式
在MVC模式里面的V,是一个个html文件。
2、MTV模式
Model就是怎么去通过py的语法调用数据库的表以及记录。
T是模板,给用户看。也就是一个个html文件。
V是视图函数。
在MTV模式里面的V,是视图函数,跟MVC的V不一样。MVC的 V 对应的是MTV的 T,
MTV与MVC基本差不多,就只有一点点区别。
二、Django通过命令行创建
注:如果是专业版,可直接通过左上角new创建Django项目。如果不能,则是社区版,需要通过命令行创建。
django
#安装: pip3 install django
添加环境变量
#1 创建project #此处是创建Django项目
django-admin startproject mysite
---mysite
---settings.py
---url.py
---wsgi.py
---- manage.py(启动文件)
#2 创建APP #创建了Django项目之后才能创建项目文件夹
python mannage.py startapp app01
#3 settings配置
TEMPLATES
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"statics"),
)
STATIC_URL = '/static/'
# 我们只能用 STATIC_URL,但STATIC_URL会按着你的STATICFILES_DIRS去找#4 根据需求设计代码
url.py
view.py
#5 使用模版
render(req,"index.html")
#6 启动项目
python manage.py runserver 127.0.0.1:8090
#7 连接数据库,操作数据
model.py
三、创建完Django来简单的使用下
1、写个返回时间的页面
创建好之后,大概长这样(创建完Django项目后,再创建你想要的APP项目文件夹,下面的blog就是)
其中static文件夹是放静态文件的地方,属于后面新建的文件夹。
首先先来简单写个url,写个showtime,在views文件里面写个showtime函数:
可以看到里面有个形参,它就是客户端(浏览器)发送给你的服务器之后,服务器给你打包的信息对象,全在这个形参里面。
记得要在views文件里加入这个东西:
然后在urls文件里面写下文件的路径:
因为views与urls属于不同的文件夹,所以先要导入文件,再使用!
接着就启动下Django看下是否有无问题:
进入控制台:
在pycharm的下方点击Terminal,进入你Django的文件夹里:
接着输入:
启动成功:
接着输入网址端口:
注意后面还要接个show_time。
然后可以看到成功了:
到此,第一个Django项目就成功完成了。
当然我们还能做个页面:
Django的Templates存有所有的html页面信息(如果没有这个文件夹,就自己创建):
然后要在配置文件里导入templates的路径:
写完了页面,怎么返回这个页面呢?
在views里写个函数:
然后再看下页面:
成功!
但是别忘记了我们的目的是返回时间,那么怎么返回呢?
这两个大括号,是语法,必须这么写
本来应该是这样:
组成一个键值对,发给前端,通过两个大括号渲染出来。如果写了上千个变量难道要一个个写吗?所以通过一个 local( ),就不用一个个写。
然后页面:
2、样式与静态文件static
当然我们也可以给前端加样式:
然后页面:
注意:所有的js文件,css样式等都要放到static文件夹里:
所有新建的文件夹,都要在配置文件里面导入路径:
注意,最后这里必须加 逗号
接着在static里面导入jq文件,使用jq加入样式:
结果页面:
成功!
2.1 static路径与别名
导入方式一:(此方法不太推荐,用得少)
可以看到,STATIC_URL 使用的是别名,就算你的路径名字怎么改,文件名怎么改,html文件中导入的始终是别名,不用改。
可以看到,页面还是能正常显示:
问题来了:如果别名改成staticsss,但前端导入的还是static,能正常显示吗?
答:不能,只能按照别名的名字来导入
导入方式二:(推荐此方法,用的最多)
在页面上加入 {% load static %}
接着导入:
然后页面:
友情提醒:Django2中,使用的是{% load staticfiles %}
3、最后
应该把static文件夹放在每一个应用下面:
路径也要改:
也可以这样改:
四、Django的url控制系统
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
urlpatterns = [
re_path(正则表达式, views视图函数,参数,别名),
]
1、路由里的正则表达(无命名分组)
我们可以在url里引入正则表达式,但是先要导入re_path(在django2中,不用path,使用的是url,可以直接使用正则,但是现在的path不行,导入re_path后才能使用)
这里的正则 \d{4} 意思是,四个数字。
于是我们访问页面:
可以显示:
当然,只要输入的是四个数字,都可以显示成功
问题:如果我们想要输入什么数字,就输出什么数字呢?
这里加个括号,意思是分组
此时看页面当然会报错,这时需要加个参数:
此时你输入什么数字,输出就是什么数字。
如果你还要再加一组数字,表示年/月,还是可以
2、路由里的正则表达(有命名分组)
暂略
3、form表单的get与post提交和django的接收
a、编写页面与准备
此时写个form表单,与对应的函数:
如果此时我们通过pycharm给的浏览器选项打开,则可以看到网址输入框显示的并不是8080端口,这种方式是错误的,应该这样:
那么此时才是Django给我们的页面网址:
b、GET方式提交
我们可以接收form表单提交的信息,GET方式提交:
打印出来的结果是:
可以看到,成功接收
注意:第一次进入此网页是通过url进来的,来到了register函数,打印了空信息,然后才是通过return语句给的网页再次进入的。所以我们看到的是第二次的页面:
这里的数据,可以通过get的方式去取得:
c、POST方式提交
我们还可以通过POST方式提交:
这时会发现,网页出错:
这是因为Django的一个中间件的问题(Django的安全检测),我们可以暂时把他注释掉:
之后就能发现,网页可以访问了。
POST方式还是一样:
d、同源与不同源和别名
如果此时不要ip与端口:
一样可以访问,是因为Django自动给你加了,自动按照同源给你加的,按照当前页面的ip与端口给你加。如果直接通过浏览器渲染页面访问,则不行:
因为此时action里面没有对应的ip与端口,自然访问失败。
但是:以上的方式都不太好,因为路径写死了,如果以后要改,项目文件很多,要一个个去改,跟前面一样起个别名就可以解决这种问题:
同时,网页也要相对应的改:
这里的别名,切记要加引号
4、路由分发
如果有好几个大型项目,那么其全局url文件里面将可能会有几百上千行,甚至上万,此时非常不好,可能稍微某个地方出错,而牵一发而动全身。所以当然是将他们分开最好:
新建一个py文件,每个项目对应自己的urls文件:
然后可以看到全局urls文件里有个提示:
直接复制:
注意,此时urls导入要加include,不然你会看到有红线报错:
然后另外一个urls文件写相关代码:
然后填写网址:
就可以看到正常访问。
此时路径要多填写一处,因为路径已经改变。