• Django入门必知必会操作


    一、Django基础必备三件套

    HttpRseponse

    内部传入一个字符串参数,返回给浏览器。

    在app目录下的views.py添加函数,添加函数之前必须在urls.py添加函数对应关系,否则访问不到

    def login(request):
        # 业务逻辑代码
        return HttpResponse('welcome to GuangDong')
    

    render

    request : 浏览器请求相关的信息

    除request参数外还接受一个待渲染的html模板文件和一个保存具体数据的字典参数。总共用三个参数

    render(request, template_name, context=None)

    将数据填充进模板文件,最后把结果返回给浏览器。(类似于之前用的jinja2模块)

    def reg(request):
        # print(request)
        # print(request.__dict__)
        user_dict = {'name':'cxk','sex':'girl'}
        # return render(request,'reg.html')
    
        # 给模板传值的方式1:
        # 将user_dict传递给reg.html页面 页面上通过xxx就能够获取到该字典
        return render(request,'reg.html',{'user':user_dict})
    
        # 给模板传值的方式2:
        # 这种情况是针对有多个字典的情况下,
        # locals()将当前名称空间中所有的变量名传递给html页面,在html页面用user_dict.name方式取值
        # 但是会有一个问题:影响效率。
        print(locals())
        return render(request,'reg.html',locals())
    
    

    redirect

    接受一个URL参数,表示跳转到指定的URL。相当于重定向。

    当我在浏览器输入http://127.0.0.1:8000/home时,他就会自动跳转到https://www.autohome.com.cn

    def home(request):
        # return redirect('/index')
        return redirect('https://www.autohome.com.cn')
    
    def index(request):
        return HttpResponse('index')
    

    二、Django连接数据库

    第一步:从settings配置文件中配置

    # django会自带一个小型的sqlite3数据库,我们只需改回我们用的mysql就行了
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'user_info', # 数据库名
            'USER':'tomjoy',
            'PASSWORD':'123456',
            'HOST':3306,
            'CHARSET':'utf8'
        }
    }
    

    第二步:

    django默认使用的是mysqldb连接数据库 但是该模块不支持了
    所以需要告诉django不要用mysqldb,得用pymysql连接
    你可以在项目名下面的__init__.py也可以在应用名下面的__init__.py文件中指定

    import pymysql
    pymysql.install_as_MySQLdb()
    

    三、request对象取值方式

    ​ 在views.py中写函数的时候,每个函数必须接受一个参数叫request,这个request就是浏览器发送请求的请求数据,django将他封装成一个对象。

    1.获取post请求携带的数据
    request.POST

    2.获取get请求携带的数据
    request.GET

    发现get和post在后端获取用户数据的时候 规律是一样的

        print(request.POST)
        print(request.POST.get('username'))
        print(request.POST.get('password')) 
       #  <QueryDict: {'username': ['admin'], 'password': ['123']}>
       #  admin
       #  123
    

    如果是一条数据有多条值,情况又不一样了

        print(request.POST)
        print(request.POST.get('username'))
        print(request.POST.get('password'))
        print(request.POST.get('hobby'))
        print(request.POST.getlist('hobby'))
        # <QueryDict: {'username': ['admin'], 'password': ['123'],'hobby': ['sing', 'dance', 'basketball']}>
    	# admin
    	# 123
    	# basketball
    

    如果还用get('hobby'),他默认只取最后一个

    要用getlist() 才能将完整的列表取出来

    四、Django ORM简介

    ORM即对象关系映射(Object Relational Mapping)
    python: mysql:

    类 即 数据库中的表

    对象 即 表的记录

    对象.属性 即 记录的某个字段对应的值

    优点:
    能够让一个不会数据库操作的人 也能够简单快捷去使用数据库

    缺点:
    由于封装程度太高 可能会导致程序的执行效率偏低,有时候 结合项目需求 可能需 要你手写sql语句

    注意事项
    1.django的orm不会自动帮你创建库,库需要你自己手动创建
    只会自动帮你创建表 你只需要书写符合django orm语法的代码即可

    1.在app下所在的models.py中书写类(创建表)

    from django.db import models
    
    class User(models.Model):
        
        # 设置id字段为user表的主键  id int primary key auto_increment
        # 在django中 你可以不指定主键字段 django orm会在创建当前表的时候,自动帮你新建一个名为id的主键字段
        id = models.AutoField(primary_key=True)
        
        # 设置username字段 username varchar(64) CharField必须要指定max_length参数
        username=models.CharField(max_length=64)   # 在django orm中 没有char字段  但是django 暴露给用户 可以自定义char字段
        
        # 设置password = password int
        password = models.IntegerField()
        # phone = models.BigIntegerField(default=110)  # 新增的字段 可以提前设置默认值
        # addr = models.CharField(max_length=64,null=True)  # 新增的字段 可以设置为空      
    

    2.上面的代码仅仅是在models.py上面添加了一个类,还没真正在数据库中创建表,

    需要再执行两条命令:数据库迁移(同步)命令:

    需要在CMD命令行中并且在该项目下的路径执行:

    1. python manage.py makemigrations 不会创建表 仅仅是生成一个记录 将你当前的操作记录到一个小本本上(migrations文件夹)
    2. python manage.py migrate 将你的orm语句真正的迁移到(同步)到数据库中

    五、Django操作数据库

    字段的增删改查:

    ​ 新增的字段:
    ​ 1.直接提供默认值 default
    ​ 2.设置该字段可以为空 null=True
    ​ 注意:不要轻易地注释models.py中任何跟数据相关的代码
    ​ 只要是跟数据库相关的代码,处理时一定要谨慎谨慎!!!

    数据的增删改查:

    ​ 1.get()方式:

    从数据库获取对象(固定写法) models . 表名 . objects.get(条件)

    select * from User where username='cxk'

    obj = models.User.objects.get(username='cxk')
    

    拿到obj后即可进行点取值

    例:

    print(obj.username)
    print(obj.password)
    

    注意:get取值方式在 当查询条件不存在的时候 ,会直接报错 。 如果存在会直接给你返回 数据对象本身。 所以不推荐使用

    ​ 2.filter()方式 推荐使用

    obj = models.User.objects.filter(username='cxk')
    

    ​ --当查询条件不存在的时候 不会报错而是返回一个空

    ​ --当条件存在的情况下 无论数据有几条返回的都是列表套对象的数据格式

    ​ --filter可以当多个查询条件 并且是and关系,用逗号隔开每个条件

    ​ --你可以将filter查询出来的结果当做列表去对待 ,列表里面放的是一个个对象

    ​ --支持正数的索引取值和切片但 不支持负数,所以还是不建议用切片取值

    ​ --建议使用first()取第一个元素

    user_obj = obj[0]
    user_obj = obj[0:3]
    
    user_obj = obj[-1]  # 报错
    
    user_obj = res.first()  取queryset第一个元素
    

    3.数据的增:

    ​ 1.create() :
    ​ --括号内参数是以关键字参数的形式,去创建数据
    ​ --该方法由一个返回值,返回值就是当前对象本身

    # 直接将用户名和密码写入数据库
    # insert into User(username,password) values('cxk','123')
    user_obj = models.User.objects.create(username='cxk',password='123')
    

    ​ 2.利用对象点方法的方式:

    user_obj = User(username='cxk',,password='123')
    user_obj.save()  # 将当前对象保存到数据库中 
    

    4.数据的增:

    方式一:update()

    方式二:

    5.数据的删除:

    delete()

  • 相关阅读:
    通过intent启动Activity
    ubuntu12.04的NFS配置
    内核添加对yaffs2文件系统的支持
    linux内核移植到S5pv210
    nand驱动移植
    tiny210V2 Uboot kernel filesystem 烧写和启动
    linux C++通过ntp协议获取网络时间
    tiny210移植linux内核(3.0.8)杂项
    Ubuntu系统中Sogou输入法面板问题解决方案
    Ubuntu系统中登陆阿里云服务器的方法
  • 原文地址:https://www.cnblogs.com/guapitomjoy/p/11748448.html
Copyright © 2020-2023  润新知