Django_xadmin_day_2

1、settings.py中修改INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.message',  #添加App名称
]

2、在message/models.py中添加模型(数据库映射,模型以类表示,类为数据库的表,类的属性为表的列)

from django.db import models

# Create your models here.

# 创建模型
class UserMessage(models.Model):
    object_id = models.CharField(max_length=50, default='', primary_key=True, verbose_name=u"主键")
    name = models.CharField(max_length=20, null=True, blank=True, default="", verbose_name=u"用户名")
    email = models.EmailField(verbose_name=u"邮箱")
    address = models.CharField(max_length=100, verbose_name=u"联系地址")
    message = models.CharField(max_length=500, verbose_name=u'留言信息')
    """
    1、CharField必须设置max_length,不然报错
    2、default设置默认值
    3、primary_key设置主键
    4、verbose_name设置人读别名
    5、每个模型都是django.db.models.Model 的一个Python 子类
    6、模型的每个属性都表示为数据库中的一个字段
    """
    class Meta:
        verbose_name = u"用户留言信息"
        verbose_name_plural = verbose_name
        """
        verbose_name:单数
        verbose_name_plural:复数
        verbose_name_plural = verbose_name:作用为设单数
        """

 3、Tools工具栏下 运行run manage.py Task,分别输入

makemigrations  message
migrate message

 数据库中生成:message_usermessage表

4、测试:apps/message/views.py文件中可以取出或者写入数据库数据

from django.shortcuts import render
from apps.message.models import UserMessage  #倒入模型类
# Create your views here.

def getform(request):

    all_me = UserMessage.objects.all()
    all_me.delete()  #删除数据库中的全部数据

    for me in all_me:
        me.delete()  #删除数据库中的一条数据

    # 取数据库中的数据
    all_messages = UserMessage.objects.all()  # 取所有数据 all_messages为QuerySet类型
    for message in all_messages:
        print(message)

    # 向数据库中写数据
    user = UserMessage()
    user.name = 'huang'
    user.message = 'world'
    user.email = '2@2.com'
    user.address = 'changsha'
    user.object_id = 3
    user.save()  # 保存
return render(request, 'message_form.html')

5、用户填写表单,程序向数据库传数据

打开templates/message_form.html文件,根据urls.py文件中配置的url

修改message_form.html文件,给action添加/form/属性:

<form action="/form/" method="post" class="smart-green">  #/form/根目录下的form

重新运行程序提前表单出现以下错误,这是Django的一种安全机制,不能随便提交表单:

解决上面错误要在message_form.html文件中添加:{%csrf_token%},重新运行提交就解决了。

通过表单向数据库提交数据

from django.shortcuts import render
from apps.message.models import UserMessage  #倒入模型类
# Create your views here.

def getform(request):
    # 提交表单是POST请求
    # get中的参数要与html文件表单中的name属性完全相同
    if request.method == 'POST':   
        name = request.POST.get('name', '')      
        message = request.POST.get('message', '')
        address = request.POST.get('address', '')
        email = request.POST.get('email', '')
        user = UserMessage()
        user.name = name
        user.address = address
        user.email = email
        user.message = message
        user.object_id = '5'
        user.save()  #保存
    return render(request, 'message_form.html')

 从数据库中取数据写入表单与配置url

#apps/message/views.py文件
from django.shortcuts import render
from apps.message.models import UserMessage  #倒入模型类
# Create your views here.

def getform(request):
    all_message = UserMessage.objects.filter(name='char') #取name=char的数据
    message = all_message[0]
    return render(request, 'message_form.html', {'my_message': message})  #{'my_message': message}传数据给html
#html文件
<form action="/form/" method="post" class="smart-green">
    <h1>留言信息
        <span>请留下你的信息.</span>
    </h1>
    <label>
        <span>姓名 :</span>
        <input id="name" type="text" value="{{ my_message.name }}" name="name" class="error" placeholder="请输入您的姓名"/>
        <div class="error-msg"></div>
    </label>
    <label>
        <span>邮箱 :</span>
        <input id="email" type="email" value="{{ my_message.email }}" name="email" placeholder="请输入邮箱地址"/>
        <div class="error-msg"></div>
    </label>
    <label>
        <span>联系地址 :</span>
        <input id="address" type="text" value="{{ my_message.address }}" name="address" placeholder="请输入联系地址"/>
        <div class="error-msg"></div>
    </label>
    <label>
        <span>留言 :</span>
        <textarea id="message" name="message"  placeholder="请输入你的建议">{{ my_message.message }}</textarea>
        <div class="error-msg"></div>
    </label>

#input用value={{xxx.xxx}}写入值
#textarea 写在标签中间{{xxx.xxx}}
from django.conf.urls import url
from django.contrib import admin
from apps.message.views import getform  #倒入配置的views页面函数
# 修改前端显示url
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^form/$', getform, name='go_form')   #给url配置别名,好入是修改r'^form/$',html也不会改,通用性更强
]

再修改html文件

<form action="{% url 'go_form'%}" method="post" class="smart-green">   

#把action="/form/"改为 action="{% url 'go_form'%}",通用性更强
原文地址:https://www.cnblogs.com/jp-mao/p/7065547.html