**django是比较传统的,mvc框架出来很多年了,是这个框架的改版,属于大的mvc框架中的一种,把开发中用到的大多数东西都设计进去了,所谓的模版,就是在html混写了很多服务器代码,在你写的函数中调用这个模版,把里面该替换的内容替换掉,这个模版就变成你要返回的html了,让html作为这个正文内容返回给server,由server包装成http的响应回去,所谓的模版就是一句话可以搞定的。
**
这里的后台管理是管理一些django的东西,不是网页后台管理。
提供orm可以让你不使用sqlalchemy
插件比较多
1.11应该是长期支持,1里面最后版本了
在项目构造初期只能用django-admin,只是在项目第一次构建的时候使用,后面都用manage.py了
脚手架搭好会有manage.py
创建迁移文件,创建表里就修改,没创建就创建,创建一个model类来做迁移,传统的也可以在数据库把表创建好。model类建造好后就会makemigrations把迁移做好最后migrate,这样就可以把迁移的事情全部做好
manage.py是来命令行管理的
urls需要不停的动,只要建立一个view,这里就需要建立路由映射
部署就需要wsgi
数据库要先进行配置
官方建议用mysqlclient
编译有问题就直接下载安装包安装。
应用才是以后经常要做的事情,只要是server后面就是应用,其实django也是应用,只不过django认为自己是框架,当wsgi调用我的时候,其实不提供任何应用的东西,只是按照要求,把请求转给你写的程序,所以才认为你写的才是应用。在内部需要做路由才能找到应用,找到应用再把功能提供出来。
应用也就是功能,
最关注的是model和view,model和数据库打交道,view就是如何处理用户请求,每一个应用都有自己的views.py,views就需要我们写的函数,如何找到我们写的函数,就需要通过路由文件urls.py
应用如何管理,可以加到配置文件里去,加到INSTALLED_APPS,可以进行后台的管理也可以进行迁移
建表的时候一般字段不会太复杂
常用的就是主键,唯一性
特殊的地方就是表名,要借助meta类
不给表名会出现这样一个名字,会生成一个名字应用名+modelname
迁移很简单直接makmigrations
以后每次迁移相当于在修改表
这个后台只不过是管理后台的表的,当然以后的用户管理也可以交给他
打开manage.py
这里有一个创建超级用户,就是管理员
用户名admin,密码admin
在数据库里能看到就成功了,在auth_user里
后使用后台管理前先要run server,不然没有网页可以用
先把当前时区改一下
zh -hanse使用中文,use-tz是否使用时区
如果牵扯到国际化的问题,如果是商业的还需要跟当地银行时间对接
保存一下,现在做完了国际化工作,就可以开始启动工作了
授权和修改密码
迁移
runserver启动
启动服务,你的修改,不用重启服务,他自己会热加载
这样diango写的第一个网站就成 了
admin进行django管理
这个服务是runserver启动的一个服务
我们在settigs把installed_apps把user加进去了
虽然加进来了,但是还需要做一些准备,models是跟数据库打交道的,tests测试的,views是后面要写的,请求来了如何response的,做视图的就是给人看
请你把什么加进来,加一个model和一个可迭代对象
models里现在有这个
user是一个model,导入进去
保存一下底下,马上刷新了
现在刷新就有了
这是admin的site下的注册管理,后台站点管理
user表里现在一条都没有,增加一个user,所谓的后台管理就是变成了一个界面的增删改查
这个用户跟我们自己建立的user表相关
users是所有用户的列表
国际化如果不改,这些进来都是英文的
这里其实就是变成中国区了
要在admin里注册model,各自的应用应该把各自的model放进来,在应用内部把相关的所有的表的管理应该加进来,因为对于相关的应用对于的表都在自己应用下的model。py里
路由,就是指url到你的处理函数之间的映射问题
用户在使用一个网站的时候,对用户来说只能写一个url,url到端口之前的不管,端口后面的全管,到达端口建立连接以后,就要告诉访问某个资源,也就是path,path有了之后才能定位到资源
但是现在是动态网站,有db,webserver,用户通过url告诉webserver通过这个path路径找到资源,但是这个资源并没有真实存在,这个资源其实是数据库里数据,没有html,是想办法让用户觉得提供了html,让程序拼一个。静态网页一般是静态文件,动态一般是动态网页技术生成的
html,css,js,图片,最常见的静态文件,动态网页是通过url访问服务器并不能真正找到这个文件,需要从数据库替你将需要的数据取回来,然后组织在动态生成的html当中,然后将动态生成的内容返回给客户端
实际上是在做url path到函数的映射,函数如果需要找数据库就找数据库,动态生成html返回给客户端。
从url到function叫映射
路由时路径选择的问题,url的路径选择问题,一个url映射到一个function上去,route路由指的是如果现在有n个url如何让他走,这就是路由的概念,url1找function1,url2找function2,这就是路由,将不同的url和函数映射管理起来就是路由。
跟路由器一样,路由器里有路由表,这里的也是路由表。记录的是URL和他们的处理函数之间的关系。本质上所有的动态网页技术都做了这个事情
路由实现了不同的url到处理函数之间的映射,url不能写的太死板,所以有了正则表达式有模式匹配
view就是视图处理函数
先看前两项,后面先不管,就是一个kv对,如果是true映射到这个v上去
在settings上有一个比较重要。,root urlconf,也就是告诉你所有url的配置,也就是路由的配置由它开始,
在blog包下面有一个urls模块
** 在blog包下面有一个urls模块**
这里已经建立了一条
地址admin
这个正则表达式的意思就是以admin开头的地址/,转给admin.site.urls
admin是别人写好的,admin模块下面有site应用,应用下有urls
可以写模块名和函数名
现在开始写自己的url映射,可以看一下打印是什么,还没调用,对和错没法知道
现在出了一些问题
string类型没有get方法
需要这么写,需要处理http请求就是django.http,保存重新加载了
这一块现在填的是缺省的
200系列都是对的
现在这里就是返回的内容
前面有请求来了先到runserver,这个server将http请求拿来后,要把里面的请求内容封装,封装之后交给django框架,要把这个封装成request对象,到时候写成request.xxx就ok了
最后将内容组织好用bytes就给一个response正文部分,按照wsgi,会把状态码和头先给start_response,最后将正文拼一块发送出去(背后做的事情一样没少,只不过框架屏蔽了)
找这个函数就是映射,下面配置的就是路由表,一个请求找到处理函数之后要响应调用response,找个response返回wsgiserver,由server再返回到浏览器端。
所以框架省略了很多操作,只要配置个数据库,数据库如果表有的话,model可以不做,迁移也可以不做,说实话直接runserver也可以跑起来。不连数据库会有一个sqllite,它将系统表注入到本地的sqllite中
不写下面就不会去连接mysql,就会把这个数据生成,把系统表塞入到里面,所以一般先把数据库链接配置好,配置好后会创建一个应用,为了马上看到应用,会先写model,这时候再runserver看一下,如果数据库链接失败,runserver一定失败
首页先测试下,然后再考虑写业务,不然整个配置都是错的
正则表达式只要包含index即可,输入aindex都是201
现在访问是404
试试index1能否访问
斜杠,路径分隔符就出来了
index1就错了
这样就卡死了,写其他的都不行
url1映射到了i函数,url2也映射到了i函数,两个不同的url指向同一个函数是可以的
就可以把后面去掉了
看一下request有哪些东西可以使用,不加注解,敲request什么都看不到
不加注解就看不到这些
GET方法,path
发起一个请求
输入成这样请求
这个就是字典,查询字符串就拿到了
看看dict有什么
请求方法,请求路径,查询方法都在
查询字符串不能使用,因为里面还有&符号=号,还需要想办法直接断开,比如这种还是比较难解析的
表单数据是可以把带名字的控件传过来,没有name不传,id是给js用的,数据一旦提交,http封装了往服务器发,只认表单控件里带name的控件
什么时候出现这种情况,interest 起的名字一模一样,还有男女gender,interest有很多个兴趣,多选框名字都一样。传数据的时候是interest=music & interest=movie这么传的
**只不过post方法提交的时候,这些看起来像查询字符串的,谁等于谁and谁等于谁是放在body,post的信息是通过request body部分传过来的,而查询字符串是放在head中的第一行的 **
get方法往往 会有多值的现象,post的提交的时候会有多值现象,表单同名的会出现这样,name相同就会出现重复值(不同字典搞不定,所以创建出特殊的东西),没有name无法提交