Python Django框架 2019(06)

Django有管理用户的模块,即django.contrib.auth。在mysite/settings.py里,这个功能模块已经注册在INSTALLED_APPS中。利用该模块,可以直接在逻辑层面管理用户,不需要为用户建立模型,也不需要手工去实现会话。

可以在admin页面直接看到用户管理的对话框,即Users。在这里创建、删除和修改用户。

点击Add增加用户~~~

在admin页面下,还可以控制不同用户组对数据库的访问权限。可以在Groups中增加用户组,设置用户组对数据库的访问权限,并将用户加入到某个用户组中。

我们创立一个新的app,即users

python manage.py startapp users

增加一个登录表格:

mysite\templates\users\login.html

<h1> Hello World! </h1>
<form role=”form” action=”/users/login/” method=”post”>
       {% csrf_token %}
      <label>Username</label>
      <input type=”text” name=’form_username’>
      <label>Password</label>
      <input name=”form_password” type=”password”>
      <input type=”submit” value=”Submit”>
 </form>
<h1>———————</h1>

views.py中,定义处理函数user_login(),来登入用户:

def first_login(request):
    return HttpResponse(“<p>Hello  USERS</p>”)

def user_login(request):
    ”’
    login
    ”’
    if request.POST:
        users = pwd = ”
        users = request.POST.get(‘form_username’)
        pwd = request.POST.get(‘form_password’)
        user     = authenticate(username=users, password=pwd)
        if user is not None and user.is_active:
            login(request, user)
            #return redirect(‘/’)
            return diff_response(request)
        else:
            return diff_response(request)
    ctx = {}
    ctx.update(csrf(request))
    return render(request, ‘login.html’,ctx)

登出

views.py中,增加该URL的处理函数:

def user_logout(request):
    ”’
    logout
    URL: /users/logout
    ”’
    logout(request)
    return redirect(‘/users’)

mysite\users\urls.py

    url(r’^$’, views.first_login),
    url(r’^login/’, views.user_login),
    url(r’^logout/’, views.user_logout),

settings.py

os.path.join(BASE_DIR, ‘templates/west’),
os.path.join(BASE_DIR, ‘templates/users’)

在Django中,对用户身份的检验,主要是在views.py中进行。views.py是连接模型和视图的中间层。HTTP请求会转给views.py中的对应处理函数处理,并发回回复。

用户的登录信息包含在request.user中,is_authenticated()方法用于判断用户是否登录,如果用户没有登录,那么该方法将返回false。该user对象属于contrib.auth.user类型,还有其它属性可供使用,比如

属性 功能
get_username() 返回用户名
set_password() 设置密码
get_fullname() 返回姓名
last_login 上次登录时间
date_joined   账户创建时间

 

模板中的用户

{% if user.is_authenticated %}
  <p>Welcome, my genuine user, my true love.</p>
{% else %}
  <p>Sorry, not login, you are not yet my sweetheart. </p>
{% endif %}

 

 

 

OK~~~~~~~~~~~~~~^

还可以利用装饰器,根据用户的登录状况,来决定views.py中处理函数的显示效果。相对于上面的if结构,装饰器使用起来更加方便。下面的user_only()是views.py中的一个处理函数。

????

@login_required
def user_only(request):
    return HttpResponse(“<p>This message is for logged in user only.</p>”)

Django中还有其它的装饰器,用于修饰处理函数。

def name_check(user):
    return user.get_username() == ‘test00’

@user_passes_test(name_check)
def specific_user(request):
    return HttpResponse(“<p>for Vamei only</p>”)

????

 

用户注册

Django中的UserCreationForm,比较简洁的生成表格,并在views.py中处理表格:

def register(request):
    if request.method == ‘POST’:
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
        return redirect(“/”)
    else:
        form = UserCreationForm()
        ctx = {‘form’: form}
        ctx.update(csrf(request))      
        return render(request, “register.html”, ctx)

 

相应的模板register.html

<form action=”” method=”post”>
   {% csrf_token %}
   {{ form.as_p }}
   <input type=”submit” value=”Register”>
</form>

 

OK~~~~~~~~~~~~~~

发表评论