• django基础


    1. django中的所有命令

    1. 下载django

    命令行:  pip install django==1.11.25  -i   源
    

    2. 创建项目

    命令行:django-admin  startproject  项目名
    

    3. 启动项目

    	命令行:
    ​			切换项目的根目录下   manage.py
    ​			python manage.py  runserver     #  127.0.0.1:8000  默认8000端口
    ​			python manage.py  runserver  80   #  127.0.0.1:80
    ​			python manage.py  runserver  0.0.0.0:80   # 0.0.0.0:80
    

    4. 创建应用app

    python manage.py startapp 应用名
    

    5. 执行数据库迁移命令

    python manage.py makemigrations    # 检测已经注册app下的models变更记录
    python manage.py migrate    # 将变更记录同步到数据库中
    

    2. django的配置

    1. 配置应用

    注册APP 让Django程序可以识别新建的APP
    INSTALLED_APPS = [
    	'app名称'  				# 第一种写法
    	"app名称.apps.app名称Config"   # 推荐写法  例如:'app01.apps.App01Config',
    ]
    

    2. 配置中间件

    MIDDLEWARE		中间件	自定义中间件注册进来可以执行其中的方法
    

    3. 模板

    模板的相关配置   主要看DIRS 模板的存放路径
    TEMPLATES中的   DIRS =[os.path.join(BASE_DIR ,'templates')]
    

    4. 数据库配置

    数据库相关配置	 告诉Django连接什么数据库
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',   # 存储引擎
            'NAME': "library03",    # 接数据库名称
            "USER":"root",         # 数据库用户名
            "PASSWORD":"123",       # 数据库密码
            "HOST":"127.0.0.1",      # 主机ip 默认本机回环地址 127.0.0.1
            "PORT":3306,       # 端口号
        }
    }
    

    5. 配置静态文件

    静态文件的别名   模板中已别名开头
    STATIC_URL = '/static/'   # 静态文件别名
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,"statics")   
    ]
    

    3. django使用mysql的流程

    1. cmd终端创建一个mysql数据库

    create databases library;
    

    2. 在settings中配置数据库的信息

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',   # 存储引擎
            'NAME': "library",    # 接数据库名称
            "USER":"root",         # 数据库用户名
            "PASSWORD":"123",       # 数据库密码
            "HOST":"127.0.0.1",      # 主机ip 默认本机回环地址 127.0.0.1
            "PORT":3306,       # 端口号
        }
    }
    

    3. 告诉使用pymysql替换mysqldb的模块

    写在与settings同级目录下的__init__中:

    import pymysql
    pymysql.install_as_MySQLdb()
    

    4. 在已经注册的app下的models.py中写类(继承models.Model)

    class User(models.Model):
        title = models.CharField(max_length=32)  #  username  varchar(32)
    

    5. 执行数据库同步指令

    python manage.py makemigrations    # 检测已经注册app下的models变更记录
    python manage.py migrate    # 将变更记录同步到数据库中
    

    4. get和post的区别

    1 . 发送get请求

    1. 地址栏输入地址  回车
    2. a标签
    3. form表单提交
       ?k1=v1&k2=v2      request.GET.get(key)  #  url携带的参数 
    get也可以提交数据,一般在路径后边添加127.0.0.1:8000/showbook/?id=2的一条数据  				/sssss/?k1=v1&k2=v2
     4. 不论是get还是post,只要是路径后有?k1=v1, get都能通过request.GET.get(k1)得到v1
    

    get也可以提交数据,一般在路径后边添加127.0.0.1:8000/showbook/?id=2的一条数据 /sssss/?k1=v1&k2=v2

    2. 发送post请求

    1.  action=''“   向当前地址进行提交  method ='post'
    2. 所有的input需要有name属性  有时携带原始数据要有value属性
    3. 需要有button默认type="submit"或者一个type=‘submit’的input框
    

    5. 模板语法

    {{ 变量  }}
    
    for循环
    {% for i in 变量  %}
    	循环体 {{ i }}
    {% endfor  %}
    
    if 条件语句
    {% if  条件  %}
    	满足条件显示的值
    {% elif  条件1  %}
    	满足条件显示的值
    {% else %}
    	不满足条件显示的值
    {% endif  %}
    

    6. input标签里的name属性和value属性

    name属性用于后端获取当前输入的值  name="username"
    ​		request.POST.get("username")
    value属性用于前端编辑等的时候显示初始值
    ​	如在input标签中添加	value="{{ pub_obj.name }}    属性值
    

    7. orm操作数据库

    1. 对象关系映射

    2. orm一些查询方法

    <1> all():   models.类名.objects.all()      查询所有结果,结果是queryset类型对象
    <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象,结果也是queryset类型 models.Book.objects.filter(title='linux',price=100) #里面的多个条件用逗号分开,并且这几个条件必须都成立,是and的关系,or关系的我们后面再学,直接在这里写是搞不定or的
    <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个,
                                如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常try。  Book.objects.get(id=1)
      
    <4> exclude(**kwargs):      排除的意思,它包含了与所给筛选条件不匹配的对象,没有不等于的操作昂,用这个exclude,返回值是queryset类型 Book.objects.exclude(id=6),返回id不等于6的所有的对象,或者在queryset基础上调用,Book.objects.all().exclude(id=6)
                     
    <5> order_by(*field):       queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型
                      models.Book.objects.all().order_by('price','id') #直接写price,默认是按照price升序排列,按照字段降序排列,就写个负号就行了order_by('-price'),order_by('price','id')是多条件排序,按照price进行升序,price相同的数据,按照id进行升序
            
    <6> reverse():              queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型
      
    <7> count():                queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。
      
    <8> first():                queryset类型的数据来调用,返回第一条记录 Book.objects.all()[0] = Book.objects.all().first(),得到的都是model对象,不是queryset
      
    <9> last():                queryset类型的数据来调用,返回最后一条记录
      
    <10> exists():              queryset类型的数据来调用,如果QuerySet包含数据,就返回True,否则返回False
                       空的queryset类型数据也有布尔值True和False,但是一般不用它来判断数据库里面是不是有数据,如果有大量的数据,你用它来判断,那么就需要查询出所有的数据,效率太差了,用count或者exits
                     例:all_books = models.Book.objects.all().exists() #翻译成的sql是SELECT (1) AS `a` FROM `app01_book` LIMIT 1,就是通过limit 1,取一条来看看是不是有数据
    
    <11> values(*field):        用的比较多,queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                                model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。
    <12> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
     
    <13> distinct():            values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录
    

    8. 视图函数的返回方法

    from django.shortcuts import render,redirect,HttpResponse
    from django.http import JsonResponse
    return HttpResponse()     返回的字符串
    return render(request,'模板的文件名')       返回HTML页面
    return redirect('地址')    重定向 
    return JsonResponse()  一般返回字典,其他加上属性safe=True
    

    展示

    1. 设计URL地址

    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publisher_list/', views.publisher_list),
    ]
    

    2. 写函数

    def publisher_list(request):
        # 从数据库中获取所有的出版社的信息
        all_publisher = models.Publisher.objects.all()  # 对象列表
    
        # 将数据展示到页面中
        return render(request,'publisher_list.html',{'k1':all_publisher})
    

    新增

    方式一:
    models.Publisher.objects.create(name=pub_name,addr=pub_addr)  # 对象
    方式二:
    pub_obj = models.Publisher(name=pub_name,addr=pub_addr)  # 内存中的对象 和数据库没关系
    pub_obj.save()  # 插入到数据库中
    

    删除

    models.Publisher.objects.filter(pid=pid).delete()  # 对象列表 删除
    models.Publisher.objects.get(pid=pid).delete()  # 对象 删除
    

    编辑

     pub_obj.name = pub_name
     pub_obj.addr = pub_addr
     pub_obj.save()  # 将修改提交的数据库
    

  • 相关阅读:
    Navicat 连接MySQL 8.0.11 出现2059错误
    安全技术运营的心得
    浅谈命令混淆
    2021年度总结与2022新的展望
    域环境搭建之安装exchange
    内网ADCS攻防
    CVE202142287复现
    企业安全建设——安全防线框架建设(一)
    frp_v0.37.1内网穿透,内网服务公网用不求人
    WP7XNA 多点触摸
  • 原文地址:https://www.cnblogs.com/lvweihe/p/11732512.html
Copyright © 2020-2023  润新知