• 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中只有一个成员的时候不要忘记加逗号
  • 相关阅读:
    Sublime Text3 支持Less
    Typescript + React-Router + Webpack 实现按需打包/加载
    从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境
    JavaScript中的一些小细节
    微信小程序(safair浏览器)flex布局中的坑
    使用YQL解决让前端爬取网页并解析
    react diff算法剖析总结
    微信小程序IOS系统中,倒计时(setInterval函数)失效的问题
    微信小程序中未解决的坑
    利用nodejs监控文件变化并使用sftp上传到服务器
  • 原文地址:https://www.cnblogs.com/onefine/p/10499376.html
Copyright © 2020-2023  润新知