学习django部分笔记之Day01

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”)
        从作者名出发得到书,反向(一个作者可能有很多书)
上一篇:使用Python增加csdn的访问量


下一篇:dedecms如何实现发布文章主动推送