django基础教程,由浅入深,一步一步学习django,最后学到的不单单是基础!
1、Python
2、Django
3、开发工具
1、Windows:Python官网下载对应是MSI安装文件
2、MAC及Linux自带Python,无需安装
1、命令行安装
```javascript
$ pip install Django==1.11.7
```
2、源码安装
```javascript
下载源码,进入根目录执行python setup.py install
```
安装完查看版本号
$ python -m django --version
1、PyCharm(推荐)
2、Sublime Text
3、Atom
1、打开命令行,进入想要安置项目的目录
2、命令行输入:django-admin startproject myblog,若没有报错,则创建项目成功
manage.py
myblog
__init__.py
settings.py
urls.py
wsgi.py
1、manage.py:项目管理器,与项目进行交互的命令行工具集入口,执行 python manage.py 来查看所有命令
启动服务命令
```javascript
$ python manage.py runserver
$ python manage.py runserver 9999
```
2、myblog目录:项目的一个容器,包含项目最基本的一些配置,目录名称不建议修改
3、wsgi.py:WSGI(Web Server Gateway Interface)中文名:Python服务器网关接口 Python应用与Web服务器之间的接口
4、urls.py:URL配置文件,Django项目中所有地址(页面)都需要我们自己去配置其URL
5、settings.py:项目的总配置文件,里面包含了数据库、Web应用、时间等各种配置
6、__init__.py: Python中声明模版的文件,内容默认为空
1、打开命令行,进入项目中manage.py同级目录
2、命令行输入:python manage.py startapp blog
3、添加应用名到setting.py中的INSTALLED_APPS里
migrations
__init__.py
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
1、migrations:数据移植(迁移)模块,内容自动生成
2、admin.py:该应用的后台管理系统设置
3、apps.py:该应用的一些配置,Django-1.9以后自动生成
4、models.py:数据模块,使用ORM框架,类似于结构中的Models(模型)
5、tests.py:自动化测试模块,Django提供了自动化测试功能,在这里编写测试脚本(语句)
6、views.py:执行响应的代码所在模块,代码逻辑处理的主要地点,项目中大部分代码均在这里编写
编辑blog.views
1、每个响应对应一个函数,函数必须返回一个响应
2、函数必须存在一个参数,一般约定为request
3、每一个响应(函数)对应一个
编辑urls.py
1、每个URL都以url的形式写出来
2、url函数放在urlpatterns列表中
3、url函数三个参数:URL(正则),对应方法,名称
第二种URL配置:包含其他URL
1、在根urls.py中引入include
2、在APP目录下创建urls.py文件,格式与根urls.py相同
3、根urls.py中url函数第二个参数改为include('blog.urls')
注意事项:
1、根urls.py针对APP配置的URL名称,是该APP所有URL的总路径
2、配置URL时注意正则表达式结尾符号$和/
1、HTML文件
2、使用了Django模板语言(Django Template Language, DTL)
3、可以使用第三方模板(如Jinja2)
1、在APP的根目录下创建名叫Templates的目录
2、在该目录下创建HTML文件
3、在views.py中返回render()
1、render()函数中支持一个dict类型参数
2、该字典是后台传递到模板的参数,键为参数名
3、在模板中使用{{参数名}}来直接使用
1、Django按照INSTALLED_APPS中的添加顺序查找Templates
2、不同APP下Templates目录下的同名.html文件会造成冲突
1、在APP的Templates目录下创建以APP名为名称的目录,将html文件放入新创建的目录下
1、通常,一个Model对应数据库的一张数据表
2、Django中Models以类的形式表现
3、它包含了一些基本字段以及数据的一些行为
1、对象关系映射(Object Relation Mapping)
2、实现了对象和数据库之间的映射
3、隐藏了数据访问的细节,不需要编写SQL语句
1、在应用根目录下创建models.py,并引入models模块
2、创建类,继承models.Model,该类即是一张数据表
3、在类中创建字段
1、字段即类里面的属性(变量),如attr = models.CharField(max_length=64)
1、命令行中进入manage.py同级目录
2、执行python manage.py makemigrations app名(可选)
3、再执行python manage.py migrate
1、Django会自动在app/migrations/目录下生成移植文件
2、执行python manage.py sqlmigrate 应用名 文件id 查看SQL语句
1、使用第三方软件 SQLite Expert Personal 轻量级、完全免费
1、views.py中import models
2、article = models.Article.objects.get(pk=1)
3、render(request, page, {'article': article})
1、模板可直接使用对象以及对象的"."操作,如
1、Admin是Django自带的一个功能强大的自动化数据管理界面,
2、被授权的用户可直接在Admin中管理数据库
3、Django提供了许多针对Admin的定制功能
1、创建用户:python manage.py createsuperuser 创建超级用户,访问后台地址
2、Admin访问入口:http://127.0.0.1:8000/admin/
3、变成中文:修改setting.py中LANGUAGE_CODE = 'zh_Hans'
1、在应用下admin.py中引入自身的models模块(或里面的模型类)
2、编辑admin.py:admin.site.register(models.Article)
1、点击Article超链接进入Article列表页面
2、点击任意一条数据,进入编辑页面修改
3、编辑页面下方一排按钮可执行相应操作
1、在Article类下添加一个方法
2、根据Python版本选择__str__(self)(v3.0以上)或__unicode__(self)
3、return self.title
1、博客主页面
2、博客文章内容页面
3、博客撰写页面
1、文章标题列表,超链接
2、发表博客按钮(超链接)
1、取出数据库中所有文章对象
2、将文章对象们打包成列表,传递到前端
3、前端页面把文章以标题超链接的形式逐个列出
{% for xx in xxs %}
HTML语句
{% endfor %}
1、标题
2、文章内容
3、修改文章按钮(超链接)
1、参数写在响应函数中request后,可以有默认值
2、URL正则表达式:r'^/article/(?P<article_id>[0-9]+)/$'
3、URL正则中的组名必须和参数名一致
1、href后面是目标地址
2、template中可以用" {% url 'app_name:url_name' param %} "
3、其中app_name和url_name都在url中配置
1、根urls,写在include()的第二个参数位置,namespace = 'blog'
2、应用下则写在url()的第三个参数位置,name = 'article'
两种写法区别:主要取决于是否使用include引用了另一个url配置文件
1、标题编辑栏
2、文章内容编辑区域
3、提交按钮
1、使用request.POST['参数名']获取表单数据
2、models.Article.objects.create(title, content)创建对象
3、涉及POST方法提交表单的,前端页面加上{% csrf_token %}
1、新文章为空,修改文章有内容
2、修改文章页面有文章对象
3、文章的ID
1、article.title = title
2、article.save()
1、写在模板中,属于Django模板语言。
2、可以修改模板中的变量,从而显示不同的内容。
1、{{ value | filter }} 例子:{{ list_nums | length }}
2、过滤器可叠加:{{ value | filter1 | filter2 | filter3 | ... }}
1、它是一个Python的交互式命令行程序
2、它自动引入了我们的项目环境
3、我们可以使用它与我们的项目进行交互
1、python manage.py shell
2、from blog.models import Article
3、Article.objects.all()
1、我们可以使用Django shell来进行一些调试工作
2、测试未知的方法
1、class ArticleAdmin(admin.ModelAdmin)
2、注册:admin.site.register(Article, ArticleAdmin)
1、list_display = ('title', 'content'),list_display同时支持tuple和list
1、list_filter = ('pub_time',)