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)