Django入门

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)
DTL初步使用
  • render()函数中支持一个dict类型的参数
  • 该字典是后台传递到模板的参数,键为参数名
  • 在模板中使用{{参数名}}来直接使用

开发第一个Template

Django查找Template顺序:
  1. Django按照INSTALLED_APPS中的添加顺序查找Templates
  2. 不同APP下的Templates目录中的同名.html文件会造成冲突
  3. 解决:
    • 在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/目录下生成移植文件
  • 查看SQL语句
    • 执行python manage.py sqlmigrate 应用名 文件id
>python manage.py makemigrations
Migrations for 'app_01':
  app_01migrations001_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)
    • return self.title

使用Admin修改数据库

完善博客

第一次请求

Django中的超链接
  • 超链接目标地址
    • href后面是目标地址
    • template中可以用{% url 'app_name:url_name' param %}
    • 其中app_name和url_name都在url中配置
  • 再配URL-- 两种写法
    • url函数名称参数:
    1. 根urls,写在include()的第二个参数位置, namespace=‘blog’
    2. 应用下则写在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中只有一个成员的时候不要忘记加逗号
原文地址:https://www.cnblogs.com/onefine/p/10499376.html