python-46-model补充

223 阅读2分钟

1.文件上传 views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
from django import forms
from django.forms import fields
# Create your views here.

class UploadForm(forms.Form):
    user=fields.CharField()
    img=fields.FileField()

def upload(req):
    if req.method=="GET":
        return render(req,'upload.html')
    else:
        # obj=UploadForm(req.POST,req.FILES)
        # if obj.is_valid():
        #     user=obj.cleaned_data['user']
        #     img=obj.cleaned_data['img']

        print(req.POST)
        print(req.FILES)
        user=req.POST.get('user')
        img = req.FILES.get('img')
        print(img.name)
        print(img.size)

        f=open(img.name,'wb')
        for line in img.chunks():
            f.write(line)
        f.close()

        return HttpResponse('ok')
    '''
    普通上传
    自定义页面上传按钮
    基于Form上传
    '''

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upload</title>
</head>
<body>
<form action="/upload/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="text" name="user">
    <div style="position:relative;">
        <a >上传</a>
        <input type="file" name="img" style="opacity: 0.2;position: absolute;top: 0;left: 0;">
    </div>

    <input type="submit" value="提交">
</form>

</body>
</html>

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('upload/', views.upload),
]

models.py

from django.db import models

# Create your models here.
# class UserInfo(models.Model):
#     username=models.CharField(
#         null=True,
#         db_column='user',
#         max_length=32,
#         db_index=True,#只能加速查找
#         # unique=True,#加速查找;限制列值唯一
#         # primary_key=True#加速查找;限制列值唯一(不能为空)
#         #admin
#         verbose_name='用户名',
#         help_text='fengfeng'
#         )
#     user_type_choices=[
#         (0,'普通用户'),
#         (1,'超级用户'),
#         (2,'Vip用户'),
#     ]
#     user_type=models.IntegerField(
#         choices=user_type_choices
#     )
# class SomeBody(models.Model):
#     caption=models.CharField(max_length=32)
#     pk = models.ForeignKey(
#         to='UserInfo',
#         to_field='id',
#         on_delete=models.CASCADE,
#         #related_name='fengfeng',#此时用 fengfeng
#         related_query_name='fengfeng',#此时用 fengfeng_set
#     )
class User(models.Model):
    username=models.CharField(max_length=32,db_index=True)
    # par=models.ForeignKey(
    #     to='Part',
    #     to_field='id',
    #     on_delete=models.CASCADE,
    #     # limit_choices_to={'id__gt':1}#此时只显示两个
    # )
    def __str__(self):
        return self.username
# class Part(models.Model):
#     caption=models.CharField(max_length=32)
#     def __str__(self):
#         return self.caption

#多对多
class Tag(models.Model):
    title=models.CharField(max_length=32)
    def __str__(self):
        return self.title
    #使用ManyToManyField只能在第三张表中创建三列数据
    # m=models.ManyToManyField(
    #     to="User",#默认和User主键进行关联
    #
    #     #表示共同协作创建第三张表
    #     through="UserToTag",
    #     through_fields=['u','t']
    # )

#第三张表
class UserToTag(models.Model):
    #写上表示用nid作为自增id,不写会自动生成id
    #nid=models.AutoField(primary_key=True)
    u=models.ForeignKey(to='User',on_delete=models.CASCADE,)
    t=models.ForeignKey(to='Tag',on_delete=models.CASCADE,)
    ctime=models.DateField()

    #联合唯一
    class Meta:
        unique_together=[
            ('u','t'),
        ]


面试题

from django.test import TestCase

# Create your tests here.
def func(arg,li=[]):
    li.append(arg)
    return li
v1 = func(1)
print(v1)
v2=func(2,[])
print(v2)
v3=func(3)
print(v3)
#第一次v1,此时会创建一个[]已经在内存中了,执行v3之前的v1=[1]会被加进去...
'''
[1]
[2]
[1, 3]
'''
n1=[11,22,33,44,55]
n3=n1[:]
print(n3)