Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

一丶Django的静态文件配置

#web服务器映射静态资源文件. static静态资源的别名
	STATIC_URL = '/static/'  # 别名

# 配置静态资源文件路径. STATICFILES_DIRS 名字不能错
    STATICFILES_DIRS = [
		# 拼接路径
        os.path.join(BASE_DIR, 'static'),  # 记得加,逗号
    ]

# 按照顺序来,可以加载多个静态资源文件夹
    STATICFILES_DIRS = [   #按照列表的顺序进行查找
        os.path.join(BASE_DIR, 'static'),
        os.path.join(BASE_DIR, 'x1'),
        os.path.join(BASE_DIR, 'x2')
    ]  

二丶post提交表单数据,csrf问题

      当通过post方式提交表单数据时,会有cssrf禁止访问的问题.需要在settings配置文件里注释掉

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

三丶创建新的app

​      Django项目下分多个子项目,每个app就是独立一个项目.

### cmd命令行创建app(在具有manage.py文件,进入cmd),
	# 语法: python manage.py startapp app名字
    例:python manage.py startapp app01
        
#PS: 在cmd命令行中可以创建多个app项目    , 必须要注册app
     # 方式一:
    # 1.找到settings文件夹 INSTALLED_APPS  
    INSTALLED_APPS = [  
        'django.contrib.admin',         站点管理系统  
        'django.contrib.auth',          认证系统  
        'django.contrib.contenttypes',      content types框架  
        'django.contrib.sessions',          session框架  
        'django.contrib.messages',          message框架  
        'django.contrib.staticfiles',       静态文件管理框架  
        'app01',  # 注册app
    ]  

     # 方式二:
        # 2.找到settings文件夹 INSTALLED_APPS  
    INSTALLED_APPS = [  
        'django.contrib.admin',         站点管理系统  
        'django.contrib.auth',          认证系统  
        'django.contrib.contenttypes',      content types框架  
        'django.contrib.sessions',          session框架  
        'django.contrib.messages',          message框架  
        'django.contrib.staticfiles',       静态文件管理框架  
        'app01.apps.App01Config',  # 注册app
    ]  

app目录

​      migrations ---> 数据操作记录,只记录修改models.py文件中,表的结构修改记录

​      admin.py ---> Django默认提供的后台管理

      apps.py ---> 当前app项目的配置

​      models.py ---> ORM,写指定的类,通过命令就可以创建数据库表结构

​      test.py ---> 单元测试

      views.py ---> 所有的业务逻辑

   如下图:👇

四丶orm对象关系映射

概念:

      对象关系映射(Object Relational Mapping),此模式是为了解决面向对象与关系数据库存在互相不匹配的现象的技术.

      ORM就是描述对象和数据库之间的映射关系.将程序中的对象自动持久化到关系型数据库中.orm在业务逻辑层和数据库之间充当桥梁的作用

优势与劣势:

# 优势
	1. 解决对象和关系的映射.
		一个类对应一张表, 每一对象对应表中的一行数据, 每个对象属性对应一行中记录中的字段
	2. 不需要直接编写sql代码,只需要操作数据库就能够操作表中的数据
	3. 提高开发效率
	
# 劣势
	1. 牺牲执行效率
	2. orm操作是有限的,orm很好解决了数据库和对象之间的大多数问题,但不是绝对的,必要时候还是需要写sql语句
	3. 极大的省去写sql的麻烦,操作技能退化

Django中的使用ORM:(重点)

      1.配置settings文件中的数据库引擎

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "你的数据库名称",  # 需要自己手动创建数据库
        "USER": "数据库用户名",
        "PASSWORD": "数据库密码",
        "HOST": "数据库IP",
        "POST": 3306
    }
}

      2.在与项目同名的'__ init __.py'文件中,执行数据库连接代码.python2X支持MYSQLDB,python3支持pymysql.(连接数据库的模块很多,在此是只是使用pymysql模块)

# 导入 pymysql
import pymysql
 
pymysql.install_as_MySQLdb()

      3.在app下的models.py文件中,写类

# 使用orm把表和对象的关系产生映射.
    class User(models.Model):  # 必须继承models模块Model. User就是表名
        # username表示表中的字段.
        # models.CharField表示是字符串类型
        # max_length表示是宽度
        username = models.CharField(max_length=32)  # username  varchar(32)
        password = models.CharField(max_length=32)  # password  varchar(32)

      4.执行数据迁移命令

# 当前项目下,使用manage.py文件管理,cmd命令行操作
    # 所有注册的APP下的models.py文件变更记录,
    # 记录models.py文件的变更, 会在 migrations文件夹下生成修改的文件,如:0001_initial.py
        python manage.py makemigrations  
    
    # 将 migrations文件夹下的0001_initial.py文件同步到数据库中
    	python manage.py migrate

      5.简单查询数据

# 使用 get()方法,只能查询一条记录也就是一个object对象 .  查不到/查询多个就会报错
		
        user=request.POST.get('form-username')
        pwd=request.POST.get('form-password')
        print(user,pwd)

        ret=models.UserInfo.objects.get(username=user,password=pwd)
        # 查询多个的错误,页面错误
            # get() returned more than one UserInfo -- it returned 2!
        # 查询不到的错误,页面错误
            # UserInfo matching query does not exist.
        # 查询到正确的
            # UserInfo object <class 'app01.models.UserInfo'>
        print(ret,type(ret))
    
    
    
    
# 使用 filter()方法,查询的是一个对象列表.QuerySet    
    ret=models.UserInfo.objects.filter(username=user,password=pwd)  # 对象列表
    print(ret,type(ret))
 	#<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>]> <class 'django.db.models.query.QuerySet'>

      小福利:免费模版网站点我

posted @ 2019-08-22 20:44  染指未来  阅读(155)  评论(0编辑  收藏  举报