django 测试5婚姻

stetting:


STATIC_URL = '/static/'

STATICFILES_DIRS = [os.path.join(BASE_DIR,('static'))]

urls:

from django.contrib import admin
from django.urls import path
from web import views

urlpatterns = [
path('',views.index),
path('login/',views.login),
path('search/',views.search), #搜索的页面
path('show/',views.show),
path('caozuo',views.caozuo), #进行统一和拒绝操作
path('marriage/',views.marriage),
path('pair/<int:id>/',views.pair), #发送匹配请求
]

modles:

from django.db import models

# Create your models here.

class User(models.Model):
name = models.CharField(max_length=30)
create_time = models.DateTimeField(auto_now_add=True) #注册时间
update_time = models.DateTimeField(auto_now=True)
pair_time = models.DateTimeField(null=True) #匹配时的时间
account = models.CharField(max_length=30)
password = models.CharField(max_length=30)
gender = models.CharField(max_length=1)
age = models.IntegerField()
pair = models.ForeignKey('User',related_name='r_pair',on_delete=models.SET_NULL,null=True,blank=True,default=None) #匹配成功字段
res = models.ManyToManyField('User') #发起匹配请求

views:

from django.shortcuts import render,redirect
from web import models
from django.http import HttpResponse
import datetime
from django.core.mail import send_mail

# Create your views here.

def index(request):
users = models.User.objects.filter(pair=None).order_by('-create_time')[:3]
#最新注册的三个单身狗用户
m_user = models.User.objects.filter().exclude(pair=None).order_by('-pair_time')[0:3]
#最新匹配成功的三个用户
return render(request,'index.html',locals())

def search(request):
user_id = request.session.get('user_id')
l_user = models.User.objects.filter(id = user_id).first()
#登录用户对象
if l_user.pair != None:
#如果用户已经匹配成功,跳转到主页
return redirect('/')
if request.method == 'POST':
gender = request.POST.get('gender')
age = request.POST.get('age')
if gender and not age: #只输入性别进行查询
users = models.User.objects.filter(gender=gender,pair=None)
elif not gender and age: #只输入年龄进行查询
users = models.User.objects.filter(age=age, pair=None)
elif gender and age: #都输入进行查询
users = models.User.objects.filter(age=age,gender=gender, pair=None)
return render(request,'search.html',locals())


def login(request):
if request.method == 'POST':
account = request.POST.get('account')
password = request.POST.get('password')
if not all([account,password]):
return HttpResponse('不能为空')
else:
u1 = models.User.objects.filter(account=account,password=password).first()
if not u1:
return HttpResponse('账号密码错误')
else:
request.session['user_id'] = u1.id #储存session

return redirect('/')
return render(request, 'login.html', locals())


def pair(request,id):
user_id = request.session.get('user_id')
post_user = models.User.objects.filter(id = user_id).first() #发送匹配请求的人
res_user = models.User.objects.filter(id = id).first() #接收匹配请求的人
if post_user.gender == res_user.gender:
return HttpResponse('同性才是真爱?')
res_user.res.add(post_user) #******添加匹配请求关系
return redirect('/search/')

def show(request):
user_id = request.session.get('user_id')
user = models.User.objects.filter(id=user_id).first()
if user.pair != None: #如果有配对,跳转页面
return redirect('/marriage/')
users = user.res.all() #查询登录着所有收到的匹配请求
return render(request, 'show.html',locals())

def caozuo(request):
id = request.GET.get('id')
action = request.GET.get('action')
#获取action,如果action为agree为同意,如果action为refuse为拒绝
user_id = request.session.get('user_id')
res_user = models.User.objects.filter(id=user_id).first()
post_user = models.User.objects.filter(id=id).first()
if action == 'refuse':
res_user.res.remove(post_user) #删除外键关系
return redirect('/show/')
else:
res_user.pair = post_user
res_user.pair_time = datetime.datetime.now()
#匹配成功,添加字段
post_user.pair = res_user
post_user.pair_time = datetime.datetime.now()
# 匹配成功,添加字段
res_user.save()
post_user.save()

post_user.res.clear()
res_user.res.clear()
#把两人所有接收到的匹配请求清空

post_user.user_set.clear()
res_user.user_set.clear()
#把两人所有发送的匹配请求清空

return redirect('/marriage/')


def marriage(request):
user_id = request.session.get('user_id')
l_user = models.User.objects.filter(pair_id=user_id).first()
#找出对象为登录者的用户
return render(request,'marriage.html',locals())
#fail_silently:布尔值,如果为False,send_mail出现错误时将引发

html:

login:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>登录页面</h2>
<form action="" method="post">
{% csrf_token %}
账号: <input type="text" name="account">
密码: <input type="password" name="password">
<button type="submit">登录</button>
</form>
</body>
</html>

index:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>最近注册的单身用户</h3>
<table border="1">
<tr>
<td>用户姓名</td>
<td>用户性别</td>
<td>用户年龄</td>
</tr>
{% for user in users %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.gender }}</td>
<td>{{ user.age }}</td>
</tr>
{% endfor %}
</table>

<h3>最近匹配用户</h3>
<table border="1">
<tr>
<td>用户姓名</td>
<td>用户性别</td>
<td>用户年龄</td>
</tr>
{% for user1 in m_user %}
<tr>
<td>{{ user1.name }}</td>
<td>{{ user1.gender }}</td>
<td>{{ user1.age }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>

marrige:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>我匹配的另一半</h2>
{{ l_user.name }}
</body>
</html>

search:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>寻找伴侣</h2>
<form action="" method="post">
{% csrf_token %}
<input type="radio" value="男" name="gender">男
<input type="radio" value="女" name="gender">女
年龄:<input type="text" name="age"> <button>查询</button>
</form>

<table border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>是否匹配</td>
</tr>
{% for user in users %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.age }}</td>
<td>{{ user.gender }}</td>
{% if user.id == user_id %}
<td>那是我自己</td>
{% else %}
<td><a href="/pair/{{ user.id }}/">匹配</a></td>
{% endif %}

</tr>
{% endfor %}
</table>
</body>
</html>

show:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>已收到的匹配请求</h2>
<table border="1">
<tr>
<td>姓名</td>
<td>年龄</td>
<td>同意</td>
<td>拒绝</td>
</tr>
{% for user in users %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.age }}</td>
<td><a href="/caozuo?id={{ user.id }}&action=agree">同意</a></td>
<td><a href="/caozuo?id={{ user.id }}&action=refuse">拒绝</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/lhrd/p/10911146.html