zoukankan      html  css  js  c++  java
  • Django的初识

    抛引:
    用户能够访问到的所有资源,都是程序员提前暴露好的(简单理解就是有 路由和视图函数 对应关系)

    如果没有暴露,用户就永远访问不了

    django 是可以自动重启的,但是有时候反应速度比较慢,也有可能在你代码没写完的时候重启了,这样会报错,但是不管用,继续书写代码即可
    

    1.小白必备三板斧

    from django.shortcuts import render, HttpResponse, redirect
    
    HttpResponse  # 返回字符串
    
    render  # 返回 html页面
    
    redirect  #重定向
    

    2.静态文件配置

    静态文件:一下都是静态文件
    	网站所用到的
        	自己写好的js
            自己写好的css
            第三方的框架 bootstrap  fontwesome  sweetalert
            
    通常情况下,网站所用到的静态文件资源,统一都放在 static 文件夹下
    STATIC_URL = '/static/' # 是访问静态资源的接口前缀
    '''只要你想访问静态资源,你就必须以 static 开头'''
    手动配置静态文件访问资源
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),  #这里的static才是真正的文件夹名字
        os.path.join(BASE_DIR, 'static1'),
        os.path.join(BASE_DIR, 'static2')
    ]
    
    接口前缀,动态解析
    如按以下类型 配置静态文件,无论settings里static怎么改,都会动态跟踪解析,不会影响
    {% load static %}
    <link rel='stylesheet' href="{% static 'bootstrap/css/bootstrap.min.css' %}">
    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
         
    
    form表单  action参数可以写的形式
    	1.不写,默认朝当前地址提交
        2.只写后缀/index/
        3.写全路径
    
    form表单默认朝后端提交的方式,默认是 get 请求
    	get请求携带参数的方式,是在 url后面?
        url?username=admin&password=212121312121
        缺点:
       		1.不安全
            2.get请求携带的参数有大小限制(最大不能超过4kb左右)
            
    注意事项:
    	前期你如果要提交post请求,要去settings.py文件中注释掉一个文件
      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',
        ]  
           
    
    3.request对象及方法
    	前后端数据交互
        如何获取请求方式
        
    获取post请求携带的数据
    	request.POST
       
    获取get请求携带的数据
    	request.GET
        
    get 和 post 在前后端获取用户数据的时候,规律都是一样的
    <QueryDict: {'username': ['chen'], 'password': ['123']}>
        
    request.POST.get('hobby')默认只能取到列表中最后一个元素
    如果想将列表完整取出来,必须用 getlist()
    
    4.pycharm连接数据库:直接在pycharm中连接(点击database进行连接)
    
    django连接数据库,两个步骤:
    	1.第一步配置文件中配置    	
                DATABASES = {
                    'default': {
                        'ENGINE': 'django.db.backends.mysql',  # 指定数据库 MySQL postgreSQL
                        'NAME': 'day56',  # 到底使用哪个库
                        'USER':'root',
                        'PASSWORD':'root',
                        'HOST':'127.0.0.1', 
                        'PORT':3306,
                        'CHARSET':'utf8'   #注意:此处千万不能写成 utf-8,会报错
                    }
                }
            }
        2.第二步:
        django默认使用的是 mysqldb 连接数据库,但是该模块不支持了
        所以要告诉 django 不要用 mysqldb 改用 pymysql 连接
        可以在项目名下的 __init__.py 或者在 应用面下的 __init__.py文件中指定以下代码即可
        import pymysql
        pymysql.install_as_MySQLdb()
        
        
    
    5.django orm简介
    	orm对象关系映射
        
        类					数据库的表
        
        对象					表的记录
        
        对象的属性			记录的某个字段对应的值
        
        优点:能够让一个不会操作数据库的人,也能够简单快捷的去使用数据
        
        缺点:由于封装程度太高,可能会导致程序的执行效率偏低
        有时候,结合项目需求,可能需要手写sql语句,(但是由于依赖orm而忘记了原生的 sql 语句怎么写了)
        
    注意事项:
    	1.django的 orm 不会自动帮你创建库,库需要自己手动创建
        表会自动帮你创建,你只需要书写符合 django orm 语法的代码即可
        
    创建表:
    去应用下所在的models.py中书写类
    
    from django.db import models
    
    # Create your models here.
    class Userinfo(models.Model):
        # 设置id字段为userinfo表的主键  id int primary key auto_increment
        id = models.AutoField(primary_key=True)  # 在django中 你可以不指定主键字段 django orm会自动给你当前表新建一个名为id的主键字段
        # 设置username字段  username varchar(64)  CharField必须要指定max_length参数
        username = models.CharField(max_length=64)  # 在django orm中 没有char字段  但是django 暴露给用户 可以自定义char字段
        # 设置password字段  password int
        password = models.IntegerField()
        
    *************重点(数据库迁移(同步)命令***************
    创建完类后,需要执行两条命令,才能成功创建出表
    1. python manage.py makemigrations  # 执行完这一步不会创表,仅仅生成一条记录,将你当前的操作记录到一个小本本上(migrations文件夹)
    
    2. python manage.py migrate  # 将你的 orm 语句真正迁移到(同步)到数据库中
    
    只要你在models.py中修改了数据库相关的代码,你就必须重新开始执行上面的两条命令
    
    
    6.字段的增删改查   数据到的增删改查
    class Userinfo(models.Model):
        # 设置id字段为userinfo的主键 id int primary_key auto_increment
        id = models.AutoField(primary_key=True) #在django中,你可以不指定主键字段,django orm会自动给你当前的表新建一个名为id的主键字段
        # 设置username字段, username varchar(64)
        username = models.CharField(max_length=64) #CharField必须要指定 max_length参数,且在 django orm 中,没有char字段,但是django 暴露给客户,可以自定义char字段
        # 设置password字段 password int
        password = models.IntegerField()
    
        # 字段的增, 新增的字段可提前设置默认值,也可设置为空
        phone = models.BigIntegerField(default=0)
        addr = models.CharField(max_length=64, null=True)
    
        # 字段的改,就直接在类里改就行了
    
        # 字段的删,注释掉要删除的代码,但是不要那样做
    
    
    数据的查询
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            #先以用户名为依据查询数据,下一行为固定写法
    
            #1.get()获取数据 当查询条件不存在的时候,会直接报错, 如果存在会直接返回数据对象本身,不推荐使用
            # res = models.Userinfo.objects.get(username=username)
            # print(res) #Userinfo object
            # print(res.username) #111
            # print(res.password) #111
    
    
            # 2. filter()  当查询条件不存在的时候,不会报错而是返回一个空
            #当查询条件存在的情况下 ,无论数据有几条,返回的都是列表套对象的数据格式
            # filter可以当多个查询条件,并且是and关系
            res = models.Userinfo.objects.filter(username=username)
            #print(res) #<QuerySet [<Userinfo: Userinfo object>]>
            # print(res[0].username) #111
            # print(res[0].password) #111
            #user_obj = res[0:2]
            user_obj = res.first() #取request第一个元素
            print(user_obj)
        return render(request, 'login.html')
    
    数据的增
    def reg(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            #直接将用户名和密码写入数据库
            user_obj = models.Userinfo.objects.create(username=username, password=password)
            # insert into userinfo(username,password) values('admin','666');
            #create 方法会有一返回值,返回值及时当前被创建的数据对象
            print(user_obj)
        return render(request, 'register.html')
    
  • 相关阅读:
    shell脚本基础->
    1->小规模集群架构规划
    推荐系统读书笔记(一)好的推荐系统
    数据挖掘概念与技术读书笔记(二)认识数据
    Linux编辑器vi使用方法详细介绍
    用户不在sudoers文件中的解决方法
    机器学习实战读书笔记(三)决策树
    机器学习实战读书笔记(二)k-近邻算法
    机器学习实战读书笔记(一)机器学习基础
    R语言实战读书笔记(十三)广义线性模型
  • 原文地址:https://www.cnblogs.com/chmily/p/11717645.html
Copyright © 2011-2022 走看看