ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习django部分笔记之Day01

2021-04-10 22:30:10  阅读:256  来源: 互联网

标签:__ models Day01 py 笔记 django 跨表 urls 模板


Day01


Django目录介绍

  • manage.py:是Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过manage.py完成。
  • 项目名/init.py 告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可能会用到
    • import pymysql
    • pymysql.install_as_MySQLdb()
  • 项目名/settings.py Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等
  • 项目名/urls.py维护项目的URL路由映射,即定义当客户端访问时由哪个模考进行响应
  • 项目名/wsgi.py定义SWGI的接口信息,主要用于服务器集成,通常本文件生成后无需改动

项目目录介绍

  • migrations包:自动生成,生辰迁移文件的
  • _init_ .py:其中暂无内容, 使得app成为一个包
  • admin.py:管理站点模型的声明文件,默认为空
  • apps.py:应用信息定 义文件,在其中生成了AppConfig,该类用于I定义应用名等数据
  • models.py:添加模型层 数据类文件
  • tests.py:测试代码文件
  • views.py:定义URL相应函数(路由规则)

基本视图

首先我们在views.py中建立一个路 由响应函数

from django.http import HttpResponse


def welcome(request):   
	return HttpResponse(HelloDjango);

接着我们在urls中进行注册

from App import views


path('welcome/', views.welcome)

基于模块化的设计,我们通常会在每个app中定义自己的urls

在项目的urls中将app的urls包含进来

from django.urls import path, include


path('app/', include('App.urls')),

基本模板

  • 模板实际上就是我们用HTML写好的页面

  • 创建模板文件夹,两种,

    • 在工程目录的需要注册settings中的TEMPLATES中的DIRS中添加

    os.path.join(BASE_ DIR,‘templates’)

      如果是直接用pycharm创建,
      settings中TEMPLATES自动配置'DIRS': [BASE_DIR / 'templates']  
    
    • 在模板文件夹中创建模板文件
  • 在views中去加载渲染模板
    方法1

      from django.template import loader 
      def welcome(request): 
      	template = loader.get_template('xxx')  
      	retuen HttpResponse(template.render())		
    

    方法2

      return render(request,'xxx.html')
    

定义模型(表)

定义年级

class Grade ( models.Model) :

	gname = models.CharField(max_ length=10)gdate = models.Date TimeField()

	ggirlnum = models.IntegerField()

	gboynum = models.IntegerField()

	isDelete = models. .BooleanField()

定义学生

class Students(models.Model):

	sname = models.CharField(max_ length=20)
	sgender = models.BooleanField(default=True)
	sage = models.IntegerField()
	
	sinfo = models.CharField(max_ length=20)
	
	isDelete = models. BooleanField(default=False)  # 关联外键
	
	sgrade = models .ForeignKey(Grade, on_delete=models.DO_NOTHING)
	# ForeignKey(Grade, on_delete=models.CASCADE) CASCADE一起删除

实现一个请求

注册一个路由
	1.urls.py中 urlpatterns=[]中添加path(参数1,参数2)
	2.path参数1 匹配路径
	3.path参数2 对应的是views中的一个函数,没有括号
去views实现对应的视图函数 
	1.第一个参数是request
	2.永远记得返回Response		

模板配置

  • 方法1:在App中进行模板配置
    • 只需在App的根目录创建templates文件夹即可
    • 如果想让代码自动提示,应该标记为模板文件夹
  • 方法2:在项目目录中进行模板配置
    • 需要在项目目录中创建templates文件夹并标记
    • 需要在settings.py中进行注册
  • 在开发中使用第二种,模板可以继承、复用

路由优化配置

  • 项目如果逻辑过于复杂,可以进行拆分
  • 拆分为多个App
  • 继续拆分路由器urls
    • 在App中创建自己的urls
      • urlpatterns 路由规则列表
      • 在根urls中进行子路由的包含
    • 子路由的使用(路径)
      • 根路由规则+子路由的规则

models 使用了ORM技术

  • Object Relational Mapping 对象关系映射
  • 将业务逻辑进行了一个解耦合
    • object.save()
    • object.delete()
  • 关系型数据库
    • DDL
    • 通过models.py定义实现 数据库表的定义
  • 数据操作–增删改查
    • 存储
      • save()
    • 查询
      • 查所有 object.all()
      • 查单个 object.get(pk=xx)
    • 更新
      • 基于查询
      • 查好的对象,修改属性,然后save()
    • 删除
      • 基于查询
      • 调用delete()

连接mysql驱动

  • mysqlclient
    • python2,3都能直接使用
    • 缺点:对MySQL安装有要求,必须指定位置存在配置文件
  • python-mysql
    • python2 支持
    • python3 不支持
  • pymysql
    • python2,3都支持
    • 还可以伪装成前面的库

django shell

  • 集成了python环境的shell终端
  • 通常在终端中做一些调试工作
  • 和ipython很像>_<?

如何看待bug

  • 看日志
    • 先看第一条
    • 再看最后一条
  • 梳理思路
    • 程序在哪一个位置和预期出现偏差

表关系

下面不懂看这里:表关系详情

  • 1:1
    • 查询任我行的手机号。
      • 正向:属性名称__跨表的属性名称(au_detail__tel) 跨表获取数据。
        models.Author.objects.filter(name=“任我行”).values_list(“au_detail__tel”)
        从作者表出发,得到电话,正向(一个作者只有一个电话)
      • 反向:小写类名__跨表的属性名称(author__name) 跨表获取数据。
        models.AuthorDetail.objects.filter(author__name=“任我行”).values_list(“tel”)
        从详细表出发,得到电话,反向(可能有多个叫任我行的,电话全展示)
  • 1:M
    • 书籍和出版社,一个出版社很多书,一本书只属于一个出版社
      • 正向查询: 书.出版社 1:1
      • 反向查询: 出版社.书_set 1:M
    • 查询菜鸟出版社出版过的所有书籍的名字与价格。
      • 正向:属性名称__跨表的属性名称
        models.Book.objects.filter(publish__name=“菜鸟出版社”).values_list(“title”, “price”)
        从书出发得到书,正向
      • 反向:小写类名__跨表的属性名称
        models.Publish.objects.filter(name=“菜鸟出版社”).values_list(“book__title”,“book__price”)
        从出版社出发得到书,反向(一个出版社可能有很多书)
  • M:M
    • 查询任我行出过的所有书籍的名字。
      • 正向:属性名称__跨表的属性名称(authors__name) 跨表获取数据:
        models.Book.objects.filter(authors__name=“任我行”).values_list(“title”)
        从书出发得到书,正向
      • 反向:小写类名__跨表的属性名称(book__title) 跨表获取数据:
        models.Author.objects.filter(name=“任我行”).values_list(“book__title”)
        从作者名出发得到书,反向(一个作者可能有很多书)

标签:__,models,Day01,py,笔记,django,跨表,urls,模板
来源: https://blog.csdn.net/weixin_44747309/article/details/115585410

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有