入门
首先,在cmd中,进入到项目的目标文件夹myblog,然后
django-admin startproject myblog
这句话在目标文件夹建立Django项目。这个时候,这个myblog项目虽然啥也没写但是已经可以跑起来了,Django自带一个小型服务器,此时我们
python manage.py runserver
既可以启动服务器,在服务器中会给出url地址和端口号,在浏览器中输入既可以打开网站。注意myblog这个文件夹目录名称不建议修改,因为Django的一些基础配置已经使用了这个目录名称。
在创建应用:
python manage.py startapp blog
配置url:
这里用反向生成的写法,
在根urls文件中from Django.urls import inculde然后在url写的后面写一个include,include的写法是应用.urls。然后在分url中,写一个app_name,然后为分urls起一个name。然后访问url就可以通过{% url '_login:login' %},也可以通过正常的url:/login来访问view里的index函数。
Django连接mysql服务器(这里是连接,不是创建,是连接弄好的数据库)
在Django中,默认的配置数据库是sqlite3,但是我们一般都用的是MySQL,
django中的默认是:
DATABASES = {
'default': {
'ENGINE':'django.db.backends.sqlite3',
'NAME':'mydatabase',
}
}
然后我们将其改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
NAME: 指定的数据库名,如果是sqlite的话,就需要填数据库文件的绝对位置
USER: 数据库登录的用户名,mysql一般都是root
PASSWORD:登录数据库的密码,必须是USER用户所对应的密码
HOST: 由于一般的数据库都是C/S结构的,所以得指定数据库服务器的位置,我们一般数据库服务器和客户端都是在一台主机上面,所以一般默认都填127.0.0.1
PORT:数据库服务器端口,mysql默认为3306
HOST和PORT都可以不填,使用默认的配置,但是如果你有更改默认配置的话,就需要填入更改后的。
~上述这些都做完了后,然后在_init_.py中写入:
import pymysql
pymysql.install_as_MySQLdb()
添加完这些就可以执行manage.py(这个是你项目里面的manage.py,(appname )):进入项目的cmd中执行 python manage.py inspectdb,不行的话就是 python manage.py inspectdb >appname/models.py
执行完命令inspectdb后,就会显示这样的几行执行后结果:
这些就是建立好的类(对应于数据库的),然后直接复制进model.py中,就可以访问数据库的内容了。
还要讲一项,就是将我们的数据添加到admin管理器中所以我们还需要做让项目的数据知道我们的更新,so同样是在manage.py的执行程序中来创建超级用户。
同样执行两个命令就可以: makemigrations blog 和 migrate blog (blog是app项目的名字)
考自:https://blog.csdn.net/Clark_Fitz817/article/details/79951671
Django的MTV模式
方开始学习Django,我将它当成一个MVC模式的框架,但是在学习的过程中发现不大对劲啊。他和MVC框架还是不一样的,通过学习其他人的文章,原来Django是一种MTV框架:
M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。
Django 视图 不处理用户输入,而仅仅决定要展现哪些数据给用户;Django 模板 仅仅决定如何展现Django视图指定的数据。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
1,Web服务器(中间件)收到一个http请求
2,Django在URLconf里查找对应的视图(View)函数来处理http请求
3,视图函数调用相应的数据模型来存取数据、调用相应的模板向用户展示页面
4,视图函数处理结束后返回一个http的响应给Web服务器
5,Web服务器将响应发送给客户端
落到实处,Django的MTV模式相对应的python文件如下:
考自:http://blog.csdn.net/dbanote/article/details/11338953
url-path
这里在django2里,url从url的方法变成了path,它允许使用一种更加简洁、可读的路由语法,所以这里记录一下路由path的语法:
1.要注意的是不再是url带^的写法 直接''里写路径就行了 而且用到正则表达式的时候要写成re_path 不要忘了前面引入re_path的类。
2.url之django2的path反向解析,这是之前拿django2写url最头疼的,所以下决心好好看一下django2的url文章,
首先应该先明确:
一.在html页面上的内容特别是向用户展示的url地址,比如常见的超链接,图片链接等,最好能动态生成,而不要固定。
二.一个django项目中一般包含了多个django应用(app)。
三.一个视图(view)往往对应多个url地址。
然后,在django中实现反向解析URL必备条件就是 url和view能一对一 的匹配。(通过view找到唯一一个对应的url,通过url也能找到唯一一个view)。
最 简单的方式 就是使用 name ,可以理解为url起了一个名字。
例如我在我的login这个app底下的urls里这么写:
app_name ='login'#这里的app_name代替了django之前版本项目url文件的namespace,在前端的用法一样
urlpatterns = [
path('', lv.login),
path('', lv.login, name='testpost')
]
然后在html的form请求这么写:
这样子就完成了这么一个页面请求,请求到了login下的url的第二条。
csrf
在表单提交这里,为了安全还是咋的,反正这里是要在form标签后面加上一个{% csrf_token %},然后之后要在views里面引用一个from django.views.decorators.csrfimport csrf_exempt,然后在方法之前@csrf_exempt
否则会报 “CSRF验证失败. 相应中断”的错。