Python Django视图返回POST而不是GET请求

Python Django视图返回POST而不是GET请求,python,django,post,get,request,Python,Django,Post,Get,Request,因此,我有这些使用POST请求注册和登录的工作视图,这两个请求都返回profile.html 问题是,当我提交表单(根据cmd)时,登录和注册视图会将一篇文章返回到登录或注册URL,以运行必要的功能。 这意味着它只是呈现profile.html,而不是运行其查看功能。 我如何让提交的表单发送到纵断面图,同时仍让他们为各自的功能发送帖子 视图: def log_in(request): if request.method == 'POST': form = log_form

因此,我有这些使用POST请求注册和登录的工作视图,这两个请求都返回profile.html

问题是,当我提交表单(根据cmd)时,登录和注册视图会将一篇文章返回到登录或注册URL,以运行必要的功能。 这意味着它只是呈现profile.html,而不是运行其查看功能。

我如何让提交的表单发送到纵断面图,同时仍让他们为各自的功能发送帖子

视图:

def log_in(request):
    if request.method == 'POST':
        form = log_form(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                print("user exists")
                login(request, user)
                return render(request, 'profile.html')
            else:
                print("user does not exist")
                print(form.errors)
                return render(request, 'login.html', {
                    'form2': log_form
                })
        else:
            return render(request, 'login.html', {
            'form2': log_form
            })
    else:
        return render(request, 'login.html', {
            'form2': log_form
        })


def profile(request, username): 
    if request.method == 'GET':
        user = Users.objects.get(username=username)
        interests = []
        interest_list = Interests.objects.filter(member=user)#i got 5 objs here
        for i in interest_list:
            interests.append(i.item)
            print('added interest')
        info = Bios.objects.get(author=user)
        return render(request, 'profile.html', {
            'user': user,
            "interests": interests,
            'info': info
        })
urlpatterns = [
    path('reg/', views.register, name='register'),
    path('log/', views.log_in, name='login'),
    path('profile/<str:username>/', views.profile, name='profile'),
    path('feed/', views.feed, name='feed')

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
                        {% csrf_token %}
                        <p>Username: {{form2.username}}</p>
                        <p>Password: {{form2.password}}</p>
                        {{form2.errors}}
                        <input type="submit" value="submit">
                        <p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
                    </form>
<form method='POST' action="{% url 'register' %}">
                        {% csrf_token %}
                        <p>Username: {{form.username}}</p>
                        <p>Email:    {{form.email}}</p>
                        <p>Password: {{form.password}}</p>
                        <p>Phone:    {{form.phone}}</p>
                        <p>First name:   {{form.first_name}}</p>
                        <p>Last name:    {{form.last_name}}</p>
                        {{form.errors}}
                        {% if form.errors %}
                            {% for field in form %}
                                {% for error in field.errors %}
                                    <p>
                                        <strong>{{ error|escape }}</strong>
                                    </p>
                                {% endfor %}
                            {% endfor %}
                            {% for error in form.non_field_errors %}
                                <p>
                                    <strong>{{ error|escape }}</strong>
                                </div>
                            {% endfor %}
                        {% endif %}
                        <input type='submit' value='Submit'>
                        <p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
                    </form>
URL:

def log_in(request):
    if request.method == 'POST':
        form = log_form(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                print("user exists")
                login(request, user)
                return render(request, 'profile.html')
            else:
                print("user does not exist")
                print(form.errors)
                return render(request, 'login.html', {
                    'form2': log_form
                })
        else:
            return render(request, 'login.html', {
            'form2': log_form
            })
    else:
        return render(request, 'login.html', {
            'form2': log_form
        })


def profile(request, username): 
    if request.method == 'GET':
        user = Users.objects.get(username=username)
        interests = []
        interest_list = Interests.objects.filter(member=user)#i got 5 objs here
        for i in interest_list:
            interests.append(i.item)
            print('added interest')
        info = Bios.objects.get(author=user)
        return render(request, 'profile.html', {
            'user': user,
            "interests": interests,
            'info': info
        })
urlpatterns = [
    path('reg/', views.register, name='register'),
    path('log/', views.log_in, name='login'),
    path('profile/<str:username>/', views.profile, name='profile'),
    path('feed/', views.feed, name='feed')

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
                        {% csrf_token %}
                        <p>Username: {{form2.username}}</p>
                        <p>Password: {{form2.password}}</p>
                        {{form2.errors}}
                        <input type="submit" value="submit">
                        <p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
                    </form>
<form method='POST' action="{% url 'register' %}">
                        {% csrf_token %}
                        <p>Username: {{form.username}}</p>
                        <p>Email:    {{form.email}}</p>
                        <p>Password: {{form.password}}</p>
                        <p>Phone:    {{form.phone}}</p>
                        <p>First name:   {{form.first_name}}</p>
                        <p>Last name:    {{form.last_name}}</p>
                        {{form.errors}}
                        {% if form.errors %}
                            {% for field in form %}
                                {% for error in field.errors %}
                                    <p>
                                        <strong>{{ error|escape }}</strong>
                                    </p>
                                {% endfor %}
                            {% endfor %}
                            {% for error in form.non_field_errors %}
                                <p>
                                    <strong>{{ error|escape }}</strong>
                                </div>
                            {% endfor %}
                        {% endif %}
                        <input type='submit' value='Submit'>
                        <p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
                    </form>
urlpatterns=[
路径('reg/',views.register,name='register'),
路径('log/',views.log_in,name='login'),
路径('profile/',views.profile,name='profile'),
路径('feed/',views.feed,name='feed')
]+静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
登录表单:

def log_in(request):
    if request.method == 'POST':
        form = log_form(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                print("user exists")
                login(request, user)
                return render(request, 'profile.html')
            else:
                print("user does not exist")
                print(form.errors)
                return render(request, 'login.html', {
                    'form2': log_form
                })
        else:
            return render(request, 'login.html', {
            'form2': log_form
            })
    else:
        return render(request, 'login.html', {
            'form2': log_form
        })


def profile(request, username): 
    if request.method == 'GET':
        user = Users.objects.get(username=username)
        interests = []
        interest_list = Interests.objects.filter(member=user)#i got 5 objs here
        for i in interest_list:
            interests.append(i.item)
            print('added interest')
        info = Bios.objects.get(author=user)
        return render(request, 'profile.html', {
            'user': user,
            "interests": interests,
            'info': info
        })
urlpatterns = [
    path('reg/', views.register, name='register'),
    path('log/', views.log_in, name='login'),
    path('profile/<str:username>/', views.profile, name='profile'),
    path('feed/', views.feed, name='feed')

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
                        {% csrf_token %}
                        <p>Username: {{form2.username}}</p>
                        <p>Password: {{form2.password}}</p>
                        {{form2.errors}}
                        <input type="submit" value="submit">
                        <p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
                    </form>
<form method='POST' action="{% url 'register' %}">
                        {% csrf_token %}
                        <p>Username: {{form.username}}</p>
                        <p>Email:    {{form.email}}</p>
                        <p>Password: {{form.password}}</p>
                        <p>Phone:    {{form.phone}}</p>
                        <p>First name:   {{form.first_name}}</p>
                        <p>Last name:    {{form.last_name}}</p>
                        {{form.errors}}
                        {% if form.errors %}
                            {% for field in form %}
                                {% for error in field.errors %}
                                    <p>
                                        <strong>{{ error|escape }}</strong>
                                    </p>
                                {% endfor %}
                            {% endfor %}
                            {% for error in form.non_field_errors %}
                                <p>
                                    <strong>{{ error|escape }}</strong>
                                </div>
                            {% endfor %}
                        {% endif %}
                        <input type='submit' value='Submit'>
                        <p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
                    </form>

{%csrf_令牌%}
用户名:{{form2.Username}

密码:{{form2.Password}

{{form2.errors}

你没有账户吗

登记表:

def log_in(request):
    if request.method == 'POST':
        form = log_form(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                print("user exists")
                login(request, user)
                return render(request, 'profile.html')
            else:
                print("user does not exist")
                print(form.errors)
                return render(request, 'login.html', {
                    'form2': log_form
                })
        else:
            return render(request, 'login.html', {
            'form2': log_form
            })
    else:
        return render(request, 'login.html', {
            'form2': log_form
        })


def profile(request, username): 
    if request.method == 'GET':
        user = Users.objects.get(username=username)
        interests = []
        interest_list = Interests.objects.filter(member=user)#i got 5 objs here
        for i in interest_list:
            interests.append(i.item)
            print('added interest')
        info = Bios.objects.get(author=user)
        return render(request, 'profile.html', {
            'user': user,
            "interests": interests,
            'info': info
        })
urlpatterns = [
    path('reg/', views.register, name='register'),
    path('log/', views.log_in, name='login'),
    path('profile/<str:username>/', views.profile, name='profile'),
    path('feed/', views.feed, name='feed')

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
<form method='POST' action="{%url 'login' %}">
                        {% csrf_token %}
                        <p>Username: {{form2.username}}</p>
                        <p>Password: {{form2.password}}</p>
                        {{form2.errors}}
                        <input type="submit" value="submit">
                        <p style='margin-top: 10px;'>Don't have an account?<a href="{% url 'register' %}"> Register</a></p>
                    </form>
<form method='POST' action="{% url 'register' %}">
                        {% csrf_token %}
                        <p>Username: {{form.username}}</p>
                        <p>Email:    {{form.email}}</p>
                        <p>Password: {{form.password}}</p>
                        <p>Phone:    {{form.phone}}</p>
                        <p>First name:   {{form.first_name}}</p>
                        <p>Last name:    {{form.last_name}}</p>
                        {{form.errors}}
                        {% if form.errors %}
                            {% for field in form %}
                                {% for error in field.errors %}
                                    <p>
                                        <strong>{{ error|escape }}</strong>
                                    </p>
                                {% endfor %}
                            {% endfor %}
                            {% for error in form.non_field_errors %}
                                <p>
                                    <strong>{{ error|escape }}</strong>
                                </div>
                            {% endfor %}
                        {% endif %}
                        <input type='submit' value='Submit'>
                        <p style="margin-top: 5px;">Already have an account?<a href="{% url 'login' %}"> Log In</a></p>
                    </form>

{%csrf_令牌%}
用户名:{{form.Username}

电子邮件:{{form.Email}

密码:{{form.Password}}

电话:{{form.Phone}

名字:{{form.First_name}

姓氏:{{form.Last_name}

{{form.errors}} {%if form.errors%} {%形式的字段为%} {%字段中有错误。错误%} {{error | escape}}

{%endfor%} {%endfor%} {%表示表单中的错误。非\u字段\u错误%} {{error | escape}} {%endfor%} {%endif%} 已经有账户了吗


登录页面应该被访问两次:当用户被重定向到该页面时,使用GET;当用户发送填写好的表单时,再次使用POST。您的视图逻辑应处理两种类型的申请:

def用户登录(请求):
如有要求,请发送:
form=UserForm(request.POST)#注意,我重命名了您的表单
username=request.POST['username']
password=request.POST['password']
用户=验证(用户名=用户名,密码=密码)
如果用户不是无:
如果user.u处于活动状态:
登录(请求、用户)
返回重定向('profile',kwargs={username=user})
否则:#请求已被获取
form=UserForm()
返回呈现(请求'login.html',{'form':form})
@要求
def配置文件(请求、用户名):
user=Users.objects.get(username=username)
兴趣=兴趣.对象.过滤器(成员=用户).values\u列表('item',flat=True)
info=Bios.objects.get(author=user)
上下文={
“用户”:用户,
“利益”:利益,
“信息”:信息
}
返回呈现(请求'profile.html',上下文)

我还稍微更改了概要视图,以使用我认为是Django基于函数的视图中的最佳实践。

起初,我只是接受了带有持久性问题的更干净的代码,但我刚刚意识到我可以在重定向的同时传递username参数。所以我把它进口了,现在我们好了。谢谢@beatmaister感谢您的接受!我编辑了代码来修复它。