django和mysql

一:# 有约束
    # to,与**表关联
    # to_field 与**表中的*列关联
    # django 自动
    # 写的depart 自动生成depart_id, on_delete=models.CASCADE 级联删除,比如这个专业没有了删除相应学生
    depart = models.ForeignKey(to='Team', to_fields='temid',on_delete=models.CASCADE)
        # 也可以让学生专业为空
        # 不删除学生,将学生专业置空
    depart = models.ForeignKey(to='Team', to_fields='temid',blank=True,null=True,on_delete=models.SET_NULL)
二:# 在django 中做约束
    gender_choices=(
        (1,'男'),
        (2,'女'),
    )
    gender = models.SmallIntegerField(verbose_name='性别',choices=gender_choices)
    # 这里如果在前端html中取值的时候 需要加入get_   
三:# 在html 中如果要跳转到新页面则href
四:模板的继承(比如导航栏的样式 可以继承)
模板文件中          


            {% block content %}
            {% endblock %}

        


然后要集成的 {% extends ‘模板文件.html’ %}
            {% block content %}
                数据
            {% endblock %}
五:你要插入时间数据的话 获取的值是datatime类型的 可以转化为字符串
datetime转化为字符串
form datetime import datetime
dt = datetime.now()
res = dt.strftime(“%Y-%m-%d-%H-%M”)
print(res)


【but 在html中需要使用该语法{{obj.create_time|date:"Y-m-d"}}】
六:在设计数据库的时候 可能会这样设计
 gender_choices = (
        (1, '男'),
        (2, '女'),
    )
    gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)
for obj in queryset
    obj.gender #1/2
    obj.get_gender_display() #get_字段名称_diaplay()

【but 在html 中不允许加入括号obj.get_gender_display】

七:如果连接外键 【depart = models.ForeignKey(to='Team', to_fields='temid',on_delete=models.CASCADE)
这里生成的是 depart_id】
了如何通过这个表的值获得另一个表的外键对应的数据,可以↓方法一
for obj in q:
     obj.depare_id
    xx = models.外键所在的表名.objects.filter(id= 外键).first()
    xx.外键所对应数据的列名
方法二↓:django 自动
for obj in q:
     obj.depare_id#获取数据库中存储的那个字段值
    obj.depart.title#根据id自动去关联表中获取哪一行数据depart对象 所以可以.title title是这个id这个行中的列【这里默认是id 和title 两列】
八:from django.db.models import Count

# 假设我们有一个名为Book的模型,并且其中有一个字段为category表示书籍的分类

# 查询每个分类下的书籍数量
results = Book.objects.values('category').annotate(total_books=Count('id'))

# 打印结果
for result in results:
    print(f"Category: {result['category']}, Total books: {result['total_books']}")


九 :form组件
view.py中
创建一个类class MyForm(django中的form)
class MyForm(Form)
    user=forms.CharField(widget=form.Input)
    pwd =form.CharFiled(widget=form.Input)
    email =form.CharFiled(widget=form.Input)
def user_add(request):
    if request.method =="GET":
    form = MyForm()
    # 实例化一个对象
    return render(request,"user_add.html",{“form”:form})
.html中
   


    {% for filed in form %}
    {{filed}}
    {% endfor %}




   

十: modelform
models.py
    class Student(models.Model):
    '''学生信息'''
    stuid = models.CharField(verbose_name='学号', primary_key=True, max_length=32, blank=False, null=False)
    name = models.CharField(verbose_name='姓名', max_length=32, blank=False, null=False)
    gender_choices = (
        (1, '男'),
        (2, '女'),
    )
    gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)
    teamid = models.CharField(verbose_name='所在班级', max_length=32, blank=False, null=False)

view.py

    class MyForm(ModelForm)
          xx = form.CharField*("...")    
                class Meta:
        model = Student
        fields =["stuid","name","gender","teamid","xx"]


十一:
class SMF(forms.ModelForm):
    class Meta:
        model = models.Student
        # fields = [file for file in models.Student.objects.all()]
        # fields = ["stuid", 'name', 'teamid']
        fields = []
        for field in models.Student.objects.all():
            fields.append(field)
定义一个名为 SMF 的表单类,并且通过 Meta 类中的 fields 属性指定表单中要包含的字段。
这个类中 必须需要一个fields 或者 exclude 然后因为查询到的结果是对象 所以需要使用
fields = [field.name for field in models.Student._meta.get_fields()]
获取表单前面的名字 并将查询到的对象转化为字符串

十二:
    fields = [field.name for field in models.Student._meta.get_fields()]
        widgets = {
            "name": forms.TextInput(attrs={"class": "form-control"})
        "password":forms.PasswordInput(同上)
        }

实际开发:这个函数和上面的class Meta为并列关系
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
        # 循环找到所以插件 添加class
            for name, field in self.fields.items():
                field.widget.attrs = {"class": "form-control"}
十三:数据效验
form.save()函数自动提交数据存储到表中 
十四:错误信息
提示英文,改成中文 在settings 这里改为 LANGUAGE_CODE = 'zh-hans'

十五:
# for i in range(100):
    #     models.Score.objects.create(stuid="2021030441023", couid="123456", teamid="666")
    # select * form 表 order by id asc;按照id 升序排序 desc 降序排序
    # models.Score.objects.all().order_by("id") 这是 asc "-id"这是dsc
    # models.Score.objects.filter(id__gt=12) 大于12 针对数字
    # models.Score.objects.filter(id__gte=12) 大于等于12 针对数字
    # models.Score.objects.filter(id__lt=12) 小于12 针对数字
    # models.Score.objects.filter(id__lte=12) 小于等于12 针对数字
    # models.Score.objects.filter(stuid__startswith=2021) 以2021开头 针对字符串
    # models.Score.objects.filter(stuid__endswith=2021) 以2021结尾 针对字符串
    # models.Score.objects.filter(stuid__contains=2021) 包含2021 针对字符串
    # q = models.Score.objects.filter(stuid='2021030441023', id=1)
    # print(q)


十六 
# ModelForm可以帮助我们生成HTML标签。
class UserModelForm(forms.ModelForm):
    name=forms.CharField(min_length=3,label="用户名")
    class Meta:
        model models.UserInfo
        fields=【"name","password",】
form UserModelForm()
# 在html中
{{form.name))    # 普通的input框
{{form.password))# 普通的input框

# 定义插件 1.
class UserModelForm(forms.ModelForm):
    class Meta:
        model models.UserInfo
        fields ["name","password",]
        widgets ={
"name":forms.TextInput(attrs={"class":"form-control")),
"password":forms.PasswordInput(attrs={"class":"form-control")),
"age":forms.TextInput(attrs={"class":"form-control")),
}

2.
class UserModelForm(forms.ModelForm):
name forms.CharField(
min length=3,
1abe1="用户名",
widget=forms.TextInput(attrs={"class":"form-control"))
)
class Meta:
model models.UserInfo
fields ["name","password","age"]
上述都太繁琐了,重新定义的init方法,批量设置

class UserModelForm(forms.ModelForm):

def init(self,*args,**kwargs):
super().init(*args,**kwargs)
## 循环modelform 中的所有字段 给每个字段的插件设置
for name,field in self.fields.items():
# 字段中有属性,保留原来的属性,没有属性才增加
if ield.widget.attrs:
field.widget.attrs["class"] = "from-control"
else:
field.widget.attrs ={
"class":"form-control",
"placeholder":field.label}

class UserEditModelForm(BootStrapModelForm)
class Meta:
model= models.UserInfo
fields =["name","password","age",]

十七: # fields = "__all__"
        # 排除level
        exclude = ["stuid"]


十八:
    http https
这是无状态&短链接   
无状态 :断开连接以后,再次发送请求,会将你认为是一个新人(即服务器 认为你以前没有请求过)
短连接 :一次请求和响应以后会断开连接
    什么是cookie 和session
浏览器向网站发送请求
网站响应两类数据 ------响应体(网页上看到的内容)响应头(cookie)
网站会划分一个“小格子”存储你以前的cookie值 这里叫session(数据库(django默认),redis,文件)

你可能感兴趣的:(django,python,mysql)