Django--第二课

请求的转发:

1 :涮新浏览器重新提交表单

2 :只能在项目内部跳转

3 :地址没有改变

重定向:

           一次以上的请求和响应,请求地址发生一次以上的变化。

            如果此时刷新页面不会出现重做现象

 

我们需要在我们的 views.py里面导入redirect和reverse模块

1,首先我们要改下views.py里的内容

       定义一个函数

def show(request,id):
     blogUser=BLogUser.objects.get(pk=id) #通过id找到bloguser 
     return render(request,'success.html',  
                   {"bloguser":BLogUser})

  return redirect(reverse('user:blogshow', args=[bloguser.id]))

2.在app里配一个路径,并添加一个app_name=user;

app_name='user'
urlpatterns = [
    path('', views.hello,name='hello'),
    path('regist/',views.regist),
    path('show/<int:id>',views.show,name='blogshow')
]

3. 在根路径下添加 namespace=user

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/',include('blog.urls',
    namespace='user'))

4. 运行我们的项目 点击注册,再刷新地址栏不会有变化了,

        看下数据库也不会重复保存

解决注册的时候用户名不能重复问题

1,在app的models.py文件中添加唯一约束:

    userName=models.CharField(max_length=30,unique=True)

2.  删除数据库中重复的名字,并在tools工具栏中重新执行下 makemigrations blog 

     重新生成一个文件   执行sqlmigrate blog 0002查看执行的sql语句

    执行 migrate blog  0002  添加约束成功

3.添加异常处理

 try:
             bloguser.save()
             return redirect(reverse('user:blogshow', args=[bloguser.id]))
        except:
            return render(request, 'rigist.html',{‘mess’:'用户名已存在'})
        现在做一个利用ajax不需要提交

当文本框失去焦点的时候就提醒我们用户名是否存在的问题

1,在python_blog中建一个文件夹来导入jquery.js

2,在根目录下的settings.py中设置静态路径 

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

3.打开浏览器输入http://127.0.0.1:8000/static/js/jquery-3.3.1.js 查看是否访问成功

4. 我们在 html页面中加入javascript

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
    <script type="text/javascript" src="/static/js/jquery-3.3.1.js"> </script>
    <script type="text/javascript">
        $(function () {
           $('#username').blur(function () {
               //失去焦点的时候获取用户名
               var uname=$(this).val();
               var csrftoken=$
                   ("input[name='csrfmiddlewaretoken']").val();
               $.ajax({
                   url:"/blog/hasname",
                   type:"post",
                   data:{"uname":uname,"csrfmiddlewaretoken":csrftoken},
                   dataType:"String",
                    success:function (result) {
                            alert(result);
                       // $("#mess").html(result)

                    }
               });
           });
        });

    </script>

</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    用户名:<input type="text" name ="username" id="username"/>
            <span id="mess">{{ mess}}</span><br/>
    用户密码:<input type="password" name="pwd"/><br/>
            <input type="submit" value="注册"/>

</form>
</body>
</html>

5.在app views.py中定义一个函数

def hasname(request):
    # post传过来一个uname
    username=request.POST.get('uname')
      #去数据库查询并返回一个对象
    bloguser=BLogUser.objects.filter(userName=username)
        #判断对象是否存在
    if len(bloguser)==1:
        return HttpResponse('用户名已被占用')
    else:
        return HttpResponse("恭喜你,该用户名可以使用")

6.在app的urls.py下给hasname 配一个路径

urlpatterns = [
    path('', views.hello,name='hello'),
    path('regist/',views.regist),
    path('show/<int:id>',views.show,name='blogshow')
    path('hasname',views.hasname)
]
7.在浏览器中输入地址  http://127.0.0.1:8000/blog/regist/




        

    

        


           









猜你喜欢

转载自blog.csdn.net/qq_41655148/article/details/79765268