python-43-Form提交

178 阅读2分钟

1.views.py

from django.shortcuts import render,redirect
from app01 import models
from app01.forms import UserForm
# Create your views here.
def users(req):
    user_list=models.UserInfo.objects.all()
    return render(req,"users.html",{'user_list':user_list})
def add_user(req):
    if req.method=="GET":
        obj=UserForm()
        return render(req,"add_user.html",{'obj':obj})
    else:
        obj=UserForm(req.POST)
        if obj.is_valid():
            print(obj.cleaned_data)
            # models.UserInfo.objects.create(
            #     username=obj.cleaned_data['user'],
            #     email=obj.cleaned_data['email']
            # )
            models.UserInfo.objects.create(**obj.cleaned_data)
            return redirect('/users/')
        else:
            return render(req,'add_user.html',{'obj':obj})

def edit_user(req,nid):
    if req.method=="GET":
        # 从数据库取出编辑选中的数据
        data = models.UserInfo.objects.filter(id=nid).first()
        # 传到前端显示
        obj = UserForm({'username': data.username, 'email': data.email})
        return render(req, 'edit_user.html', {'obj': obj, 'nid': nid})
    else:
        obj=UserForm(req.POST)
        if obj.is_valid():
            models.UserInfo.objects.filter(id=nid).update(**obj.cleaned_data)
            return redirect('/users/')
        else:
            return render(req, 'edit_user.html', {'obj': obj, 'nid': nid})
'''
Form
    1.验证
    2.生成HTML
    3.初始化默认值
    

'''

2.urls.py

"""day59 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,re_path
from app01 import views
from app02 import views as v2
from app03 import views as v3
urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', views.users),
    path('add_user/', views.add_user),
    re_path('edit_user-(\d+)/', views.edit_user),
    re_path('test/', v2.test),
    re_path('love/', v2.love),
    re_path('ajax/', v2.ajax),
    re_path('xuliehua/', v3.xuliehua),

]

3.forms.py

from django import forms as dforms
from django.forms import fields
class UserForm(dforms.Form):
    username=fields.CharField()
    email=fields.EmailField()

4.models.py

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    username=models.CharField(max_length=32)
    email=models.EmailField(max_length=32)

5.user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>users</title>
</head>
<body>
<a href="/add_user/">添加</a>
    <ul>
        {% for user in user_list %}
            <li>{{ user.id }}-{{ user.username }}-{{ user.email }}<a href="/edit_user-{{ user.id }}/">编辑</a></li>
        {% endfor %}

    </ul>
</body>
</html>

6.add_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>add_user</title>
</head>
<body>
{#novalidate 属性规定当提交表单时不对其进行验证。#}
{#如果使用该属性,则表单不会验证表单的输入。#}
<form action="/add_user/" method="post" novalidate>
    {% csrf_token %}
    <p>{{ obj.username }}{{ obj.errors.username.0 }}</p>
    <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
    <input type="submit" value="提交">
</form>
</body>
</html>

7.edit_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>edit_user</title>
</head>
<body>
<form action="/edit_user-{{ nid }}/" method="post" novalidate>
        {% csrf_token %}
        <p>{{ obj.username }}{{ obj.errors.username.0 }}</p>
        <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
    <input type="submit" value="提交">
</form>
</body>
</html>