Django入门
创建项目及应用
创建项目
Django框架安装:https://blog.csdn.net/jiduochou963/article/details/86526383
创建应用
进入项目中manage.py
同级目录:
命令:python manage.py startapp app_name
注意要将应用名添加到settings.py
中的INSTALLED_APPS
里面
views.py
- 执行响应的代码所在模块
- 代码逻辑处理的主要地点
- 项目中大部分代码均在这里编写
第一个Template
重新配置URL
Templates
什么是Templates
- HTML文件
- 使用了Django模板引擎(
Django Template Language, DTL
) - 使用第三方模板(如
Jinja2
)
- 使用了Django模板引擎(
DTL初步使用
render()
函数中支持一个dict类型的参数- 该字典是后台传递到模板的参数,键为参数名
- 在模板中使用
{{参数名}}
来直接使用
开发第一个Template
Django查找Template顺序:
- Django按照INSTALLED_APPS中的添加顺序查找Templates
- 不同APP下的Templates目录中的同名.html文件会造成冲突
- 解决:
- 在APP的Templates目录下创建以APP名为名称的目录
- 将html文件放入新目录的目录下
- 注意查看一下,以防IDE乱改名称害人
Models
Django中的Models
- 通常,一个Model对应数据库的一张数据表
- Django中Models以类的形式表现
- 它包含了一些基本字段以及数据的一些行为
编写博客的Model
ORM
- 对象关系映射(Object Relation Mapping)
- 实现了对象和数据库之间的映射
- 影藏了数据访问的细节,不需要编写SQL语句
编写Models步骤
- 在应用根目录下创建
models.py
, 并引入models模块 - 创建类,继承
models.Model
, 该类即是一张数据表 - 在类中创建字段
字段的创建
- 字段即类里面的属性(变量)
- attr = models.CharField(max_length = 64)
- 参数max_length是必须的,用来约束长度
- 可选参数defalt指定参数的默认值
生成数据表
- 执行命令
python manage.py makemigrations app(可选)
python manage.py migrate
- 查看
- Django会自动在
app/migrations/
目录下生成移植文件
- Django会自动在
- 查看SQL语句
- 执行
python manage.py sqlmigrate 应用名 文件id
- 执行
>python manage.py makemigrations
Migrations for 'app_01':
app_01migrations 001_initial.py
- Create model Article
>python manage.py migrate
Operations to perform:
Apply all migrations: admin, app_01, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying app_01.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
>
>python manage.py sqlmigrate app_01 0001
BEGIN;
--
-- Create model Article
--
CREATE TABLE "app_01_article" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(32) NOT NULL, "content" text NULL);
COMMIT;
>
默认sqlite3的数据库在项目根目录下db.sqlite3
将数据呈现在页面上
后台步骤
views.py
中:
from django.shortcuts import render, HttpResponse
from . import models
def resp_fun(request):
modelobj= models.Article.objects.get(pk=modelobj_id) # article是要返回的对象
return render(request, 'page_name', {'article': article})
前端模板For循环
{% for xx in xxs %}
HTML语句
{% endfor%}
Admin
Admin是Django自带的一个功能强大的自动化数据管理界面;被授权的用户可以直接在Admin中管理数据库,Django提供了许多针对Admin的定制功能。
创建超级用户
配置Admin
创建用户
- 创建超级用户
python manage.py createsuperuser
- Admin入口
http://localhost:8000/admin/
- 设置中文
- 修改
settings.py
中的LANGUAGE_GODE = 'zh_Hans'
- 修改
>python manage.py createsuperuser
Username (leave blank to use 'onefine'): admin
Email address: 188302531@qq.com
Password:
Password (again):
Superuser created successfully.
>
配置Admain
- 在应用下
admin.py
中引入自身的models模块(或里面的模型类) - 编辑admin.py:
admin.site.register(models.Article)
- 修改数据模式显示名称
- 在Article类下添加一个方法
- Python3.x
__str__(self)
- Python2.x
__unicode__(self)
- Python3.x
return self.title
- 在Article类下添加一个方法
使用Admin修改数据库
完善博客
Django中的超链接
- 超链接目标地址
- href后面是目标地址
- template中可以用
{% url 'app_name:url_name' param %}
- 其中app_name和url_name都在url中配置
- 再配URL-- 两种写法
- url函数名称参数:
- 根urls,写在include()的第二个参数位置, namespace=‘blog’
- 应用下则写在url()的第三个参数位置, name=‘artcle’
- 主要取决于是否使用include引用了另一个url配置文件
编辑响应函数
- 使用
request.POST['参数名']
获取表单数据 models.Article.objects.create(title, content)
创建对象- 涉及
POST
方法提交表单的,前端页面要加上{% csrf_token %}
博客主页面
博客内容页面
博客编写页面
补充内容
Templates过滤器
什么是过滤器?
- 写在模板中,属于Django模板语言
- 可以修改模板中的变量,从而显示不同的内容。
如何使用过滤器?
{{value|filter}}
- 如:
{{list_nums|length}}
- 如:
- 过滤器可叠加:
{{value|filter1|filter2|...}}
Django Shell
- 它是一个Python的交互式命令行程序
- 它自动引入了我们的项目环境
- 可以使用它与我们的项目进行交互
如何使用Djangp Shell?
- python manage.py shell
- 例子:
from blog.models import Article
Article.objects.all()
>python manage.py shell
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from app_01.models import Article
In [2]: Article.objects.all()
Out[2]: <QuerySet [<Article: 不知道取什么标题2>, <Article: 第二篇博客。。被修改了>, <Article: 叽叽歪歪叽叽歪歪>, <Article: 第一次发文章好开心>, <Article: 2222222>, <Article: 1dd>]>
In [3]:
Django shell有何用呢?
- 可以使用它来进行一些调试工作
- 测试未知的方法
In [3]: Article.objects.all().values()
Out[3]: <QuerySet [{'id': 1, 'title': '不知道取什么标题2', 'content': '哈哈哈xxxx'}, {'id': 2, 'title': '第二篇博客。。 被修改了', 'content': 'lalalalala问题解决啦 好开心'}, {'id': 10, 'title': '叽叽歪歪叽叽歪歪', 'content': '嘎嘎嘎嘎嘎嘎'}, {'id': 11, 'title': '第一次发文章好开心', 'content': '哈哈哈哈哈哈哈哈哈哈哈哈哈嗝'}, {'id': 12, 'title': '2222222', 'content': '223333333'}, {'id': 13, 'title': '1dd', 'content': '2fadfdafadf'}]>
In [4]:
根据返回结构就知道改方法返回一个列表,列表里面是字典,每个字典包含了一个对象的所有属性,,
Admin增强
Admin过滤器
区别前面的Templates过滤器。
- 使用:
list_filter = ('pub_time',)
注意,tuple中只有一个成员的时候不要忘记加逗号