HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM

HttpResponse

主要用于返回字符串类型的数据  def index(request):     return HttpResponse('index页面')  在页面中就会显示  index页面 

render

主要用于返回html文件 并且支持模板语法(django自己写的)  在浏览器中输入http://127.0.0.1:8000/index/后,会返回index.html页面。 def index(request):     return render(request,'index.html')  使用render给前端传值 def index(request):     return render(request,'index.html',{'name':'春游去动物园'}) 传过去是什么数据类型,在前端使用时还是什么数据类型。 <h1>index页面</h1> <span>{{ name }}</span> #此时name的值为春游去动物园 

redirect

主要用于重定向 括号内可以写其他网站的全称 也可以自己网站的后缀  在浏览器中输入http://127.0.0.1:8000/index/时 重定向到一个完整的网址 def index(request):     return redirect('http://www.baidu.com')  重定向到自己网站 def login(request):     return render(request,'login.html')  def index(request):     return redirect('/login/') 

django框架的(static)静态文件配置

在根目录创建static文件夹,再在static中分别创建css,js,img等各种静态文件对应的文件夹,将 静态文件分门别类放入对应文件夹中。 
1、在项目页面的 settings.py 文件中配置 STATIC_URL 。 STATIC_URL = '/static/'  STATIC_URL的作用是用于拼接静态文件的存储路径。  2、在配置文件中配置STATICFILES_DIRS为静态文件的存储路径。 STATICFILES_DIRS = [     os.path.join(BASE_DIR, static) ] 这里的 static是在和项目同级的目录下创建static 文件夹,用来存储静态文件。 在static 文件夹下,可以创建 css、js、fonts、images等文件下来分类存放静态文件。  '''     STATIC_URL = '/static/'      STATICFILES_DIRS = [         os.path.join(BASE_DIR, static)     ] ''' 

基本使用

{#导入静态文件#} {% load static %} {#加载应用home下static指定静态文件--图片#} <img src={%  static 'images/img001.jpg' %}> {#加载静态文件下的CSS文件夹或指定css文件#} <link rel=stylesheet href={% static 'css/as.css' %}> 

request对象方法

获取当前请求方式 request.method  	返回的是纯大写的请求方法字符串'POST'  'GET'  获取post请求提交的普通数据 request.POST      结果是一个QueryDict 可以看成字典处理 {'username':['春游去动物园'],'hobby':['篮球','羽毛球']} request.POST.get('username') # 春游去动物园 request.POST.get('hobby') # 羽毛球 request.POST.getlist('hobby') # ['篮球','羽毛球']          get方法会拿到值列表中最后一个元素  而不是整个列表       getlist方法会直接拿到整个值列表       获取get请求提交的普通数据 request.GET      结果是一个QueryDict 可以看成字典处理{'username':['春游去动物园'],'hobby':['篮球','羽毛球']} request.GET.get('username') request.GET.getlist('hobby') # ['篮球','羽毛球'] 

POST请求报错

如果是POST请求的话,django会报错。 出现这个错误的原因主要是,跨站请求伪造。 简单来说就是,django框架为我们提供了一个中间 件,用于处理跨站请求伪造的,假如某个用户从来没有登录过我们的网站就给我们网站post数据,这 样是会被django这个中间件给阻挡,禁止请求。然后我们在开发web的时候可以给每一个登录的用户分 配一个token。这个token会被写入到用户的cookie文件里面。然后下次用户post数据的时候, 就会带上这个token。 因此如果没有token的用户就会被禁止post数据。  方法一: 在settings.py里面注释掉  'django.middleware.csrf.CsrfViewMiddleware'这一行   方法二: 在视图文件views.py里面使用@csrf_exempt views.py 中导入模块 from django.views.decorators.csrf import csrf_exempt  @csrf_exempt def login(request):     if request.method == 'POST':         print(request.POST)         print(request.POST.get('username'))     print(request.GET)     print(request.GET.get('info'))     return render(request,'login.html') 加上那一句@csrf_exempt之后 ,就表示,当前的函数不受django跨站请求伪造的中间件的限制。 

pycharm连接MySQL

其实pycharm也可以充当很多数据库软件的客户端 1.pycharm右上方侧边 database 2.pycharm左下方边角 database 3.上述两个地方都没有 需要下载插件 或者直接重装一个正常的pycharm 	settings   	plugins     	搜索database下载即可     # 链接数据库   1.选择数据库    2.首次链接需要下载驱动   	download driver...   3.测试链接如果不通过 则需要换驱动重新下载使用   	Driver:MySQL MySQL for 5.1 

django链接MySQL

 django默认自带一个sqlite3数据库 但是功能很少 仅用于本地测试  1.默认配置 	DATABASES = {         'default': {         'ENGINE': 'django.db.backends.sqlite3',         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),     } } 2.修改配置 	DATABASES = {         'default': {         'ENGINE': 'django.db.backends.mysql',         'NAME': 'test', # 数据库名         'HOST': '127.0.0.1', # ip地址         'PORT': 3306, # 端口号         'USER': 'root', # 用户名         'PASSWORD': '123456', # 密码     } } 3.指定模块   在项目同名的文件夹内的__init__.py   或者应用名的文件夹内的__init__.py   添加一行固定的代码   import pymysql   pymysql.install_as_MySQLdb() 

ORM对象-关系映射

ORM优势   (1)只需要面向对象编程, 不需要面向数据库编写代码.       对数据库的操作都转化成对类属性和方法的操作.       不用编写各种数据库的sql语句.   (2)实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.       不在关注用的是mysql、oracle...等.       通过简单的配置就可以轻松更换数据库, 而不需要修改代码.  ORM劣势     相比较直接使用SQL语句操作数据库,有性能损失.     根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失. 

ORM和数据库关系:

  在Django中model是你数据的单一、明确的信息来源。它包含了你存储的数据的重要字段和行为。 通常,一个模型(model)映射到一个数据库表.  基本情况:   每个模型都是一个Python类,它是django.db.models.Model的子类。   模型的每个属性都代表一个数据库字段。   综上所述,Django为您提供了一个自动生成的数据库访问API。 

执行数据库迁移命令

  python3 manage.py makemigrations  # 记录操作   python3 manage.py migrate  # 将操作迁移到数据库    	首次执行迁移命令 django还会自动创建一些默认需要使用到的表    

字段类型

属性名 = models.字段类型,定义属性时需要指定字段类型, 通过字段类型的参数指定选项  属性名:   不允许使用python的保留关键字   不允许使用mysql的保留关键字   不允许使用连续的下划线,因为Django的查询语法就是连续的下划线  AutoField:自动增长的IntegerField, 不指定时Django会自动创建属性名为id的自动增长属性  BooleanField:布尔字段,值为True或False  NullBooleanField:支持Null、True、False三种值  CharField(max_length=20):字符串 参数max_length表示最大字符个数  TextFiled:大文本字段,一般超过4000个字符时使用  IntegerField:整数  DecimalField(max_digits=None, decimal_places=None):可以指定精度的十进制浮点数 参数max_digits表示总位数 参数decimal_places表示小数位数  FloatField():浮点数   DateField[auto_now=False, auto_now_add=False]):日期 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于最后一次修改的时间戳,它 总是使用当前日期,默认为false 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当 前日期,默认为false 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误  TimeField:参数和DateField一样  DateTimeField:日期时间,参数同DateField  FileField:上传文件字段,以二进制的形式  ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片 

字段选项

null:如果为True,表示允许为空,默认值是False  blank:如果为True,则该字段允许为空白,默认值是False       对比:null是数据库范畴的概念,blank是表单验证范畴的  db_column:字段的名称,如果未指定,则使用属性的名称(只限于数据库表中的名字,操作数据库 还是类属性的名字)  db_index:若值为True, 则在表中会为此字段创建索引,默认值是False(为了优化查询速度 )  default:默认值,这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。  primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField 的选项使用  unique:如果为True, 这个字段在表中必须有唯一值,这个值不能重复,默认值是False  '''   注意:Django会自动为表创建主键字段     如果使用选项设置某属性为主键字段后,Django不会再创建自动增长的主键字段     默认创建的主键字段为id,可以使用pk代替,pk全拼为primary key ''' 

创建表

class Users(models.Model):     uid = models.AutoField(primary_key=True)  # 等价于uid int primary key auto_increment     name = models.CharField(max_length=32)  # 等价于name varchar(32)     pwd = models.IntegerField()  # 等价于pwd int 

ORM基本使用

增   models.表名.objects.create(field1='XXX', field2='XXX', ...)      res=models.UserInfo.objects.create(user='root',password='pwd',age=18)   print(res)   print(res.user)   print(res.password)   print(res.age)  删   models.表名.objects.filter(筛选条件).delete()    models.UserGroup.objects.filter(id=2).delete()  改    models.表名.objects.filter(筛选条件).update(修改内容)    models.UserGroup.objects.filter(id=2).update(title='公关部')  查    models.表名.objects.filter(筛选条件)    res = models.Users.objects.filter(name='春游去动物园')   print(res)  # <QuerySet [<Users: Users object>]>   print(res[0])  # Users object   print(res[0].uid)  # 1   print(res[0].name)  # 春游去动物园   print(res[0].pwd)  # 111 

修改数据库表的默认的名称

数据库表的默认名称为 :   应用名_模型名   例:Book应用中定义BookInfo模型类     Book_bookinfo  在模型类中定义元类Meta,用于设置元信息,使用db_table自定义表的名字   # 书籍信息模型   class BookInfo(models.Model):       name = models.CharField(max_length=20) #图书名称         class Meta: #元信息类           db_table = 'bookinfo' #自定义表的名字