Django

Django

1、启动项目app

  1. 控制台console输入python manage.py startapp app
  2. 在这里插入图片描述
    可使用pycharm快捷方式执行manage.py,后在弹出窗口直接执行start app

2、注册项目app

  1. ​ 进入setting.py 在 INSTALLED_APPS添加app01.apps.App01Config[项目名称.apps.类名 ]

3 、添加URL

  1. 在urls.urlpatterns列表中添加path(‘index/’[路由], views.index[路由对应方法])
  2. 在view中添加方法默认参数request,返回字符串 return HttpResponse(字符串)
  3. 返回html页面 return render(request, “url.html”[返回的html])

4、开启django 项目

  1. python manage.py runserver
  2. pycharm:直接启动django项目

5、静态模板文件

  1. 项目中添加static文件夹,其中文件夹包含css,img,js,plugins

6、Django模板语法

  1. views中方法增加字典返回参数,对应html文件中以{{变量名}}进行调用

  2. 选择列表中某个元素,则在html中使用{{变量名.下标}}进行选择

  3. 循环选择列表元素:

    <div>
    {% for item in n2 %}
        <span>{%item%}</span>
    {% endfor %}
    <div/>
    
  4. 选择字典的模版语法

    1. 直接显示字典

      <div>
          {{n3}}
      </div>
      
    2. 通过键值对进行获取

      <div>
          {{n3.key}} #通过键获取值
      </div>
      
    3. 通过循环取得键或值

      <div>
          {% for item in n3.keys%}#取得所有的键
          <span> {{item}} </span>
          {% endfor%}
          {% for item in n3.values%}#取得所有的值
          <span>
          {{item}}
          </span>
          {% endfor %}
      </div>
      
    4. 条件语句

      <div>
          {% if info.key == "张三"%}
          	{{info.name}}
          {% else %}
          	{{"key无张三"}}
          {% endif %}
      </div>
      

7、获取请求及响应

def some(request):
    #request 是一个对象,封装了用户发过来的所有的数据
    #获取用户的请求方式
    request.method
    #获取在url传递值
    request.GET
    #获取post请求体内的参数
    request.POST.get('user')
    request.POST.get('pwd')
    #将字符串内容返回给浏览器
    return HttpResponse
	#返回html给浏览器
    return render(request,"xxx.html",{key:value})
	#重定向
    return redirect(url)

8、ORM操作数据库

  1. 链接数据库

    1. 在setting.py文件中修改配置DATABASES

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': "django",
              'USER': 'root',
              'PASSWORD': '123456',
              'HOST': 'localhost',
              'PORT': 3306,
          }
      }
      
  2. 创建,修改,删除表【无法创建数据库】【python版本至少3.9】【项目需要注册在settings】

    创建表:在models.py文件中

    1. class UserInfo(models.Model):
          """
          ORM根据此类的类型及字段自动创建表等同于sql语句
          crate table app01_userinfo(
          name varchar(32),
          pwd varchar(64),
          age int
          )
          且并会生成一个id列且自增主键
          在已有表新增列可给一个默认值例:
          gender=models.IntegerField(default='male')
          """
           #id=models.BigAutoField(verbose_name='id',primary_key=True) 自行创建bigint类型自增主键
          #id=models.AutoField(verbose_name='id',primary_key=True)自行创建int类型自增主键 
          name=models.CharField(max_length=32)
          pws=models.CharField(max_length=64)
          age=models.IntegerField()
          
      

    执行命令

    1. 控制台执行命令:

      python manage.py makemigrations
      python manage.py migrate
      

    操作数据

    1. 类名.object.create(字段名1="值",字段名2="值")
      UserInfo.object.create(name="张三",pws="123")
      
    2. 类名.object.filter(字段名1="值").delete()#满足filter条件删除
      类名.object.all().delete() #全部删除
      
    3. data=类名.object.filter(id="值").update(字段="值") #修改满足条件的值
      data=类名.object.all().update(字段="值") #修改所有的值
      
    4. 类名.object.all()#查询所有数据 #返回queryset类型数据,其中为对象
      #获取数据
      	data=类名.object.all()
      	for obj in data:
      		obj.name
      	data=类名.object.filter(id="值") #返回满足条件的queryset对象
      	data=类名.object.filter(id="值").first #返回满足条件的queryset对象中第一个数据
      

    5.级联删除及设置关联表可为空值

    在这里插入图片描述

    class UserInfo(models.Model):
        """
        员工表
        """
        name=models.CharField(verbose_name='姓名',max_length=16)
        pwd=models.CharField(verbose_name='密码',max_length=64)
        age=models.IntegerField(verbose_name='年龄')
        account=models.DecimalField(verbose_name='工资余额',max_length=10,decimal_places=2,default=0)
        creat_time=models.DateTimeField(verbose_name='入职时间')
        #加上约束 to:与表关联 to_filed:与表中字段关联,写入数据库是django会将department改成department_id
        #如果Ddepartment表被删除
            #1、把userInfo关联的数据删除-->级联删除 #department=models.ForeignKey(to="Departmanet",to_field="id",on_delete=models.CASCADE)
            #2、把userInfo关联的数据置空--->设置为空
            #department = models.ForeignKey(to="Departmanet", to_field="id", on_delete=models.SET_NULL,null=True,blank=True)
            #3、给定字段值范围进行创建字段
            gender_chioces=(
            (1,"男"),
            (2,"女")
        )
        gender=models.SmallIntegerField(verbose_name='性别',choices=gender_chioces)
    

9、模板的继承

  1. 模板页

    在这里插入图片描述
    需要自定义部分写入

    {% block content %}{% endlock%}
    
  2. 需要使用模板页

    在这里插入图片描述

    #导入模板
    {% extends '模板html' %}
    {% block content %}
    #自定义内容
    {% endblock %}
    

)]需要自定义部分写入

{% block content %}{% endlock%}
  1. 需要使用模板页

    [外链图片转存中…(img-2csQ2gx9-1721646997271)]

    #导入模板
    {% extends '模板html' %}
    {% block content %}
    #自定义内容
    {% endblock %}
    

10、ModelForm和Form

  1. 不用组件的缺点
    1. 用户提交数据无校验
    2. 页面上无错误提示
    3. 数据库每个字段需要手动在前端添加
    4. 展示数据库总的数据,需要手动获取并循环展示在页面
  2. From
    1. 解决前三个问题

    2. form基本格式

      1. class MyFrom(Form):
        	user=forms.CharField(weiget=forms.TextInput)#自动在前端生成input标签
            addr=forms.CharField(weiget=forms.TextInput)
            #类型
            forms.__all__ = (
            'Field', 'CharField', 'IntegerField',
            'DateField', 'TimeField', 'DateTimeField', 'DurationField',
            'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField',
            'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
            'ComboField', 'MultiValueField', 'FloatField', 'DecimalField',
            'SplitDateTimeField', 'GenericIPAddressField', 'FilePathField',
            'JSONField', 'SlugField', 'TypedChoiceField', 'TypedMultipleChoiceField',
            'UUIDField',
        )
            form
            #插件
            from.__all__ = (
            'Media', 'MediaDefiningClass', 'Widget', 'TextInput', 'NumberInput',
            'EmailInput', 'URLInput', 'PasswordInput', 'HiddenInput',
            'MultipleHiddenInput', 'FileInput', 'ClearableFileInput', 'Textarea',
            'DateInput', 'DateTimeInput', 'TimeInput', 'CheckboxInput', 'Select',
            'NullBooleanSelect', 'SelectMultiple', 'RadioSelect',
            'CheckboxSelectMultiple', 'MultiWidget', 'SplitDateTimeWidget',
            'SplitHiddenDateTimeWidget', 'SelectDateWidget',
        )
        
        def user_add(request):
            ...
            form=MyFrom()
            return render(request,'xx.html',{"form":form})
        

        前端Form书写方式

        <form>
            {{form.user}}
        </form>
        <!--等同于--!>
        <form>
            <input type="text" name="user"/>
        </form>
        
  3. ModleFrom(推荐:数据库某些表的增删改查)
    1. 解决四个问题

    2. ModelForm基本格式

      1. models页(数据库新建字段页)

        class Departmanet(models.Model):
            """
            部门表
            """
            #id=models.BigAutoField(verbose_name='id',primary_key=True) 自行创建bigint类型自增主键
            #id=models.AutoField(verbose_name='id',primary_key=True)自行创建int类型自增主键
            titile=models.CharField(verbose_name='部门名称',max_length=32)
            ### 由于UserInfo中department字段与Departmanet中的id进行关联了,在view中返回Departmanet对象,要在前端页面展示verbose_name则:
            def __str__(self):
                return self.titile
        class UserInfo(models.Model):
            """
            员工表
            """
            name=models.CharField(verbose_name='姓名',max_length=16)
            pwd=models.CharField(verbose_name='密码',max_length=64)
            age=models.IntegerField(verbose_name='年龄')
            account=models.DecimalField(verbose_name='工资余额',max_length=10,decimal_places=2,default=0,max_digits=10)
            creat_time=models.DateTimeField(verbose_name='入职时间')
            #加上约束 to:与表关联 to_filed:与表中字段关联,写入数据库是django会将department改成department_id
            #如果Ddepartment表被删除
                #1、把userInfo关联的数据删除-->级联删除
                #department=models.ForeignKey(to="Departmanet",to_field="id",on_delete=models.CASCADE)
                #2、把userInfo关联的数据置空
                #department = models.ForeignKey(to="Departmanet", to_field="id", on_delete=models.SET_NULL,null=True,blank=True)
            department = models.ForeignKey(to="Departmanet", to_field="id", on_delete=models.SET_NULL, null=True, blank=True)
            #给定字段值范围进行创建字段
            gender_chioces=(
                (1,"男"),
                (2,"女")
            )
            gender=models.SmallIntegerField(verbose_name='性别',choices=gender_chioces)
        

        views页面

        from django import forms
        class MyForm(forms.ModelForm):#还支持用户自定义参数
            class Meta:#M大写
                fields=models.UserInfo#fields=需要model.py的类名 !!!!!!一定要用fields
                fields=["name","pwd","age".....]
                        widgets={
                    "name":forms.TextInput(attrs={"class":"from_control","placeholder":"姓名"})
                }###在前端加样式
                    #给所有字段加样式
                def __init__(self,*args,**kwargs):
                    super().__init__(*args,**kwargs)
                    for name,field in self.fields.items():
                        field.widget.attrs={"class":"from-control"}
        def user(request):
            form=Myform()
            return render(request,'xxx.html',{"form":form})	
        
        

        前端ModelForm页面

        <form>
            {{% for form in forms %}}
            	{{form.label}}{{form}} <!--可以将form下所有字段循环展示在前端-->
            	<!--#{{form.label}}可以取得model.py中的verbose_name-->
            {{% endfor %}}
        </form>
        
  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值