Django AJAX登录表单验证(Django AJAX login form validation)
我正在尝试在Django中创建一个AJAX登录表单,这将涉及检查用户是否输入了正确的
username
和password
。 这是我现在的代码:urls.py
urlpatterns = [ url(r'^$', views.boxes_view, name='news'), url(r'^user_login/', views.user_login, name='user_login'), ]
forms.py
class UserLoginForm(forms.Form): username = forms.CharField(max_length=25) password = forms.CharField(widget=forms.PasswordInput) class Meta: model = User fields = [ 'username', 'password', ]
base.html文件
<form method="post" enctype="multipart/form-data" action="{% url 'user_login' %}" class="form_login">{% csrf_token %} <div class="loginWrapper"> <div class="login"> <div class="loginBox"> {{ form_login.username|placeholder:"username"|add_class:"login_username" }} {{ form_login.password|placeholder:"password"|add_class:"login_password" }} <input type="submit" value="login"/> </div> </div> </div> </form>
这是我的jQuery函数。 它成功将输入的
username
和password
到控制台。base.js
$('.form_login').on('submit', function(e) { $.ajax({ type: 'POST', url: 'http://127.0.0.1:8000/user_login/', data: {'username': $('.login_username').val(), 'password': $('.login_password').val()}, success: function (data) { console.log(data) } } ) })
如何从jQuery函数获取
data
到我的views.py? 这是我当前的视图,可以正常登录用户,但是如果输入了错误的凭据,它只是提交表单,这就是为什么我想实现AJAX以防止提交和列出错误(如果发生这种情况)。views.py
def user_login(request): form_login = UserLoginForm(request.POST or None) if form_login.is_valid(): username = form_login.cleaned_data['username'] password = form_login.cleaned_data['password'] user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) else: pass else: print(form_login.errors) print(form_login.non_field_errors) form_login = UserLoginForm() return redirect('/')
然后我如何在views.py中验证jQuery数据?
I'm trying to create an AJAX login form in Django, which would involve checking if the user has entered the correct
username
andpassword
. Here is my code right now:urls.py
urlpatterns = [ url(r'^$', views.boxes_view, name='news'), url(r'^user_login/', views.user_login, name='user_login'), ]
forms.py
class UserLoginForm(forms.Form): username = forms.CharField(max_length=25) password = forms.CharField(widget=forms.PasswordInput) class Meta: model = User fields = [ 'username', 'password', ]
base.html
<form method="post" enctype="multipart/form-data" action="{% url 'user_login' %}" class="form_login">{% csrf_token %} <div class="loginWrapper"> <div class="login"> <div class="loginBox"> {{ form_login.username|placeholder:"username"|add_class:"login_username" }} {{ form_login.password|placeholder:"password"|add_class:"login_password" }} <input type="submit" value="login"/> </div> </div> </div> </form>
Here is my jQuery function. It successfully logs the entered
username
andpassword
to the console.base.js
$('.form_login').on('submit', function(e) { $.ajax({ type: 'POST', url: 'http://127.0.0.1:8000/user_login/', data: {'username': $('.login_username').val(), 'password': $('.login_password').val()}, success: function (data) { console.log(data) } } ) })
How do I get the
data
from the jQuery function to my views.py? Here is my current views which works fine to log a user in, however if the wrong credentials are entered it just submits the form anyway, which is why I want to implement AJAX to prevent submission and list errors if this happens.views.py
def user_login(request): form_login = UserLoginForm(request.POST or None) if form_login.is_valid(): username = form_login.cleaned_data['username'] password = form_login.cleaned_data['password'] user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) else: pass else: print(form_login.errors) print(form_login.non_field_errors) form_login = UserLoginForm() return redirect('/')
And then how do I authenticate the jQuery data in my views.py?
原文:https://stackoverflow.com/questions/41375161
最满意答案
可能吗?
是。
如果是,怎么样?
将其作为参数传递。
我不希望我的用户将参数中的上下文传递给我的库项目,因为我的库项目可能会通过JNI调用,我不知道如何在JNI中获取上下文并将其传递给Java层。
然后弄清楚“你可以如何在JNI中获取上下文并将其传递给Java层”。 我会想像你会像任何其他对象一样传递它。 @Blundell指出,你没有任何其他选择。
Is it possible?
Yes.
If yes, how?
Pass it in as a parameter.
I don't want my user to pass context in parameter to my library project because it is possible that my library project will be called through JNI and I have no idea how I can get context in JNI and pass it to Java layer.
Then figure out "how [you] can get context in JNI and pass it to Java layer". I would imagine that you would pass it like any other object. As @Blundell noted, you do not really have any other option.
相关问答
更多-
是否可以在Android图书馆计划中获取应用程序的上下文?(Is it possible to get application's context in an Android Library Project?)[2021-10-21]
可能吗? 是。 如果是,怎么样? 将其作为参数传递。 我不希望我的用户将参数中的上下文传递给我的库项目,因为我的库项目可能会通过JNI调用,我不知道如何在JNI中获取上下文并将其传递给Java层。 然后弄清楚“你可以如何在JNI中获取上下文并将其传递给Java层”。 我会想像你会像任何其他对象一样传递它。 @Blundell指出,你没有任何其他选择。 Is it possible? Yes. If yes, how? Pass it in as a parameter. I don't want my us ... -
使用图书馆计划(Using a Library Project)[2024-03-24]
是的,你可以使用。 只需将旧应用程序用作新项目的库。 Yes sure you can use. just use your old app as library for your new project. -
>其他文件 - >新建 - 选择Android项目 选择“从现有的源创建项目” 点击“浏览...”按钮并导航到johannilsson-android-actionbar \ actionbar 完成(现在在您的工作区中的动作栏项目) 右键单击您的项目 - >属性 在Android-> Library部分中,单击Add 选择最近添加的项目 - > Ok 而已! 现在你可以使用它 File->New->Other Select Android Project Select "Create Project fr ...
-
Android测试支持库(目前是com.android.support.test:runner:0.3)发布了新的方法。 @RunWith(AndroidJUnit4.class) @MediumTest public class SomeClassTest { private Context instrumentationCtx; @Before public void setup() { instrumentationCtx = Instrumentation ...
-
引用文档 : “在图书馆项目中有两种建议的代码和资源测试方法: 您可以设置一个测试项目,该项目将依赖于库项目来管理应用程序项目。 然后,您可以向项目添加测试以获取库特定的功能。 您可以设置一个依赖于库的标准应用程序项目,并将该工具放在该项目中。 这样,您可以创建一个包含测试/测试和要测试的代码的自包含项目。“ Quoting the documentation: "There are two recommended ways of setting up testing on code and resourc ...
-
不可以。上下文仍然是应用程序,活动和服务。 图书馆的资源会合并到您自己的资源中。 No. The Contexts are still the Application, Activities, and Services. The library's resources get merged into your own.
-
“匕首 - 安卓”库,如何提供上下文(应用程序)?(“dagger-android” library, how to provide Context(Application)?)[2022-08-17]
最好分离@Binds和@Provides,你可以创建一个组件类: @Singleton @Component( modules = [(AppModule::class)] ) interface AppComponent { @Component.Builder interface Builder { @BindsInstance fun application(app: Application): Builder fun buil ... -
建立图书馆项目(Build library project)[2023-07-20]
现在不可能。 现在我们可以通过以下步骤创建一个只有二进制的库项目: 使用源代码等创建一个Android库项目 - 这是您的主项目,您将从其中创建用于分发的库项目的一个版本 编译Java源代码(例如,ant编译)并将其转换为JAR文件 创建一个分布式Android库项目,使用与主库项目相同的资源,但没有源代码 将JAR文件放入发行版Android库项目的libs /目录中结果分发Android库项目将拥有主项目所需的所有内容,而无需源代码。 这个解决方案有一些限制: 我们仍然需要运送资源。 我们必须重写我们的 ... -
您只需从活动中调用Activity.getPackageName即可 You just need to call Activity.getPackageName from your activity
-
Android - 图书馆计划(Android - Library Project)[2021-08-16]
1)列表只显示库项目,因此列表中不显示其他项目。 2)如果项目中的isLibrary => properties => android,则项目是一个库项目。 3)在project => properties => android中检查isLibrary 1) the list only show library projects, so other projects aren't show in the list. 2) a project is a library project if isLibrary ...