D16 文件创建页 Create doc

先做了一个简易的文件创建页面
doc_info/views.py
设定成用get载入http://127.0.0.1:8000/doc/create/
就显示文件创建页的表单
Imgur
如果是post载入
就执行资料创建还有重新转址到使用者个人文件页
render: 是将资料从这个view传送给指定的html然後呈现出来
从create的view里面return render到 user list.html
跟从user list的view里面return render到 user list.html 结果可能不一样
因为个别view里面传送出去的资讯可能不同
redirect: 等於是重新载入特定网址
此处doc_id不用指定因为会自行创建

@login_required
def doc_create(request):
    if request.method == "POST":
        user_id = request.user.id
        doc_create_date = datetime.now()
        doc_title = request.POST.get('title','')
        doc_remark = request.POST.get('remark','')
        upload_file = request.FILES.get('upload_file','')
        doc = doc_warehouse(
            create_date = doc_create_date,
            user_id = user_id,
            title = doc_title,
            remark = doc_remark,
            upload_file = upload_file,
        )
        doc.save()
        user_profile = get_object_or_404(UserProfile, user=request.user)
        user_profile.phone_number = request.POST.get('phone_number','')
        user_profile.save()
        return redirect('/doc/user/list')
    else:
        user = request.user
        Doc_warehouse = doc_warehouse.objects.filter(user_id=user.id)
        form = CreateForm()
        context = {
            'form': form
        }
        return render(request, 'doc/create.html', context)

网址就一样简单明了
doc_info/urls.py

urlpatterns = [
    path('doc/create/', views.doc_create, name='create'),
]

action保持"",在summit後会传送回本页
在测试的时候可以改成{% url 'doc_info:test' %}传送到test将request的资讯都列出来
如果使用者有手机就列出手机
没有手机就强制他一定要输入手机 送出资料後会存到使用者profile
templates/create.html

{% block content %}

<a href="{% url 'doc_info:main' %}">Main page</a> |
<a href="{% url 'auth_info:profile' %}">My Profile</a> | 
<a href="{% url 'account_logout' %}">Logout</a>

<form method="post" action="" enctype="multipart/form-data">
    {% csrf_token %}
    <h3>Create Document</h3>
    <table>
        <tr>
            <th>Author: </th>
            <td>{{ user.first_name }} {{ user.last_name }}</td>
        </tr>
        <tr>
            <th>Contact Email: </th>
            <td>{{ user.email }}</td>
        </tr>        
        {% if user.userprofile.phone_number %}
            <tr>
                <th>Contact Phone: </th>
                <td>{{ user.userprofile.phone_number }}</td>
            </tr>
        {% else %}
            <tr>
                <th>Contact Phone: </th>
                <td>{{ form.phone_number }}</td>
            </tr>
        {% endif %}
        <!-- need to have some gap here -->
        <tr>
            <th>Title: </th>
            <td>{{ form.title }}</td>
        </tr>
        <tr>
            <th>Remark: </th>
            <td>{{ form.remark }}</td>
        </tr>
        <tr>
            <th>Attachment: </th>
            <td><input type="file" name="upload_file"></td>
        </tr>
    </table>
    <div class="button-wrapper submit">
        <input type="submit" value="Save" />
    </div>
</form>

{% endblock %}

<<:  【从实作学习ASP.NET Core】Day10 | 後台 | 文字编辑器 CKEditor

>>:  PartiSQL简介

Day 10 | 嵌套元件(一)

嵌套元件(Nesting Components),在 Vue.js 中是很普遍的用法,可以在父元件赋...

量化交易30天 Day28 - 投资组合概念(八) CAPM实际应用

量化交易30天 本系列文章是纪录一位量化交易新手的学习过程,除了基础的Python语法不说明,其他...

Day#01 合抱之木生於毫末

前言 所谓工程师就是,想到一个点子之後一直囤着、欠了一屁股技术债、init一堆新的side proj...

【第二二天 - Flutter GitHub Search 范例+RxDart+搜寻快取】

前言 今日的程序码 => GTIHBU 今天来讲讲搜寻的介绍。那当然,肯定要以 github ...

用React刻自己的投资Dashboard Day18 - 选单列active style功能

tags: 2021铁人赛 React 上一篇将选单列做出来,并且完成点击上方按钮会跳转至对应页面的...